主にDIYのブログ -2ページ目

主にDIYのブログ

ブログの説明を入力しません。

何度も調べ直し&テストしてるので、自分用にメモ。

 

メインフォームからサブフォームを作りShow()し、メインフォームの操作に応じてサブフォームの非同期メソッドを呼び出しサブフォームに色々させたりその結果を受け取ったりしたい。例えばサブフォームにブラウザコントロールが表示されててそれ操作し結果を返させたり。

ただその間に入ってるメソッドが基底クラスのvirtualをoverrideしたものだったりして、気軽にasync Taskに出来ない場合、困ったことになる。(メインフォームが一定時間固まるのは気にしないとしても)

 

同期メソッドから非同期メソッドを呼び出し、その完了を待たねばならぬのだが、

 

1.asyncに出来ないのでawaitは使えない

 

2.Wait()を使うとメインフォームだけじゃなくサブフォームのメッセージループも止まる(両フォーム同じスレッドだから)ので、例えばWebView2.NavigationCompleted等を待つことも出来ずソフト全体が固まる

 

3.Task.Run()で別スレッドにしたら、スレッドをまたぐことになりサブフォームのコントロールを操作できない

 

袋小路かと思いきや…解決策はある。例えば以下2通り。

 
●非同期メソッド終了後の処理をContinueWith()内に書く。例外発生時の処理も書ける。別のContinueWith()を繋げたり等。シングルスレッドでメッセージループを介してあっちこっちに処理が飛ぶ流れが興味深い。把握しておくべき。

 

Task t = subform.HogeAsync();    //呼び出すと、呼び出し先のawaitまで実行した後戻ってきて下の行へ進む。awaitから先はメッセージループでメッセージ拾った後実行される。

 

 

t.ContinueWith((result) => { /*非同期メソッド終了後の処理*/ }, TaskContinuationOptions.ExecuteSynchronously);    //その間に非同期メソッド終了後の処理を登録しておく。

return;    //このメソッドを抜け、メッセージループに戻り、メッセージを拾うと、呼び出し先のawait以降の処理が実行され、その後非同期メソッド終了後の処理が実行される。

 

ただし、awaitで戻る前に例外で戻った場合、ContinueWith()で非同期メソッド終了後の処理が即座に実行され、その後returnする。

また、両タスク内の例外は外側でtry~catchで捕まえられないので注意。HogeAsync()内の例外はContinueWith()で登録された処理内で見れるが、その処理内の例外をどうするかが問題。まあ数珠繋ぎでいいんだろうけど。

あとContinueWith()の第2引数はTaskScheduler.FromCurrentSynchronizationContext()にしとかないと別スレッドになっちゃうかも。その辺の理解まだ甘いなー。

 

 

あるいは…

 

 
●無理やりメッセージループし状態遷移させ、タスクが終わるのを待つ。あまり美しくない。例外はcatch出来ないが、タスクのException.InnerExceptionで見ることはできる。
 

Task t = subform.HogeAsync();

while (!t.IsCompleted)

{

  Thread.Sleep(100);

  Application.DoEvents();

}

 

 

細かい所は省略。再入禁止処理等々。

 

他、Invokeとか使う方法もあるかな?

 

あとはここにメモしたことを忘れない様にせねば。まあ忘れても調べ直しで検索した時ここがヒットするから大丈夫か。

 

 

新鮮ワサビのおろしたては超うまい。でもワサビ栽培は涼しく冷水湧くところじゃないと難しい。

ってことで、エアコンの冷たいドレン水を使ってワサビ栽培出来ないのかな?

直接栽培用水にできる綺麗さじゃないようだから、栽培用水か栽培鉢を冷やす用途で。

いつか試そう。

車のシートに例によってペプシコーラ1.5Lペットボトルを背骨に沿わせて縦に配置したら、背骨が伸び&両肩がフリーになって尋常じゃなく快適だった。人に依るのかもしれんが、シートって凹んでるより凸ってる方がいいんじゃ?

エアコン室外機を冷やし冷房効率を上げるDIYは多々あれど、多分これが最強。

 

ドレン排水はキンキンに冷えている。それを地面に垂らし地面を冷やしちゃもったいない。

というわけで、100円均一のメッシュ板にポリエステルロープをぐるぐる巻き、それをエアコン室外機の吸気口付近に配置。その中央上部にドレンホースからの排水を垂らし吸わせるようにした。冷水で濡れたロープの隙間を通った冷たい空気が室外機に吸われる形。

超安上がりで作れて、フィンに直接水掛からないから腐食の心配も少なく、しかもメンテナンス不要。

ちなみに冬はドレン排水無いから効率ダウンすることもない。

 

※ただこれだと端の方まで水が染みづらいようで、まだ改善の余地あり。

 

家庭菜園用ペットボトル自動給水器。

ペプシコーラ1.5L 2本使う。

下の土台側は下記加工後地面に埋める。
・上部を落とす
・縦に2本切れ込みを入れる
・穴を空け不織布紐を数本通す(穴は水面より上、外側の紐は水面よりチョイ上を這わす?)

上のタンク側はアルミホイル巻いて水入れて逆さに挿すだけ。

これで、毛細管現象で吸われて水位減った分だけ自動で水やりされる。1本だけの給水器だと穴の大きさ調整とか必要だけど、これなら不要なはず。

 

 

・・・と思ったけど、どうやら土自体が紐と同じ役割を果たし毛細管現象&サイフォンの原理で水位同じになるまでどんどん流出し続けるっぽいので、底面がある鉢で下図の様にしないとダメっぽい。うーむ・・・。

 

 

大きいカーポートで建築確認申請義務あるから、役所に問い合わせてこんな感じの建築面積1m不算入線でいいか確認してから進めてたんだけど、いざ正式書類出してみたら、「すぐ近くに擁壁があるなら開放性が高いと言えない」との回答・・・。で、「近く」の定義(距離)についての明確な回答は無し。

敷地自体には余裕があるから建てられなくなったわけではないけど、何か損した気分。

 

っていうか、近くに壁アリでアウトになるなら、申請義務無い1台用カーポートとか、緩和条件勘違いして建ててる人多そう。いや、その手のカーポートは建蔽率無視も多いか。

 

図1

 

図2

 

図3

全く蒸れない枕を作った。

100円均一で買った焼き網を曲げて針金で固定。それにPC用静音ファンを付け、同じく100円の洗濯ネットを被せて完成。ACアダプタは既存のを流用。

 

 

思った以上に超快適。耳元にファンがあるので静音ファンじゃないとうるさくなるので注意。

 

 

※ 2日で焼き網が分解し始めました…。もっと頑丈な網じゃなきゃだめ。

 

 

※ 水枕のs-sleep エス・スリープ買ってみたらいい感じだった。水が熱吸収し放熱してくれるから、むしろ冷え過ぎって位。

 

 

 

振り出し竿が超頑強に固着した。細くて強く握れないし、ハンマーや床で100回位叩き続けてもビヨンビヨン。油や熱もダメ。

 

力を伝えられりゃ外せるのに…ってことで、布製ガムテープを使用。竿と指をぐるぐるにして力を100%伝えられるようにした。結果、びっくりするほどあっさり外せた。

何故かほとんど普及してないっぽいけど、おそらくこの方法が最強のはずなので是非お試しを。

 

先日買ったハローキティ テレスコピック式スピンキャストリール一体式ロッドが、糸が全く露出していない構造で子供の入門用に非常に良かった。ただ、いかんせん竿が短すぎて堤防釣りすら満足に出来ない。堤防の壁に針引っ掛かりまくる。

 

そこで、振り出し&中通し竿+スピンキャストリールの組み合わせで買い直してみたんだけど、色々失敗。

まず、3継全部振り出しかと思ったら、先端と真ん中のみ振り出しだった…。持ち運び面倒だが、これはどうしようもないから諦め。

 

あと、スピンキャストリールを竿にぶら下がるタイプじゃなく上に乗るタイプにしたら、このタイプの竿との組み合わせじゃ案の定回転してリールが下になってしまう。そこで、樹脂粘土でグリップを作り接着した。なんとか回転しなくなった。

 

ちなみにハローキティの竿&リールは凧揚げ用に使う予定。あるいは猫おもちゃ用にするのも楽しいかも。