ふらっと C#,C♯,C#(初心者用) Part148at TECHふらっと C#,C♯,C#(初心者用) Part148 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト300:デフォルトの名無しさん 20/09/26 17:36:48.45 xSRIB2Tf0.net >>293,294,295 数日間悩んでたのですが、教えて下さったキーワードを手がかりに調べ直してみます 本当に助かりました。ありがとうございます。 301:デフォルトの名無しさん 20/09/27 04:46:18.27 6sIZ9RBB0.net Android, Electron などは、スレッドが2つある。 UI(描画)スレッドと、サーバー(バックグラウンド)スレッド だから、2つのコンテキスト・文脈をまたがって、非同期などはできない。 異なる文脈の処理を呼び出すには、文脈を切り替えるような、特別な書き方がある まあ、Windows のGUIアプリが、2つの文脈でやっているかどうかは知らないけど 302:デフォルトの名無しさん 20/09/27 07:46:38.96 WpoxB1nK0.net >>297 知らんのかよ。 やってるけど。 303:デフォルトの名無しさん 20/09/27 16:39:54.69 BMd/NSoW0.net >>291 多分非同期処理って調べるとasyncの例ばかりで自分で戻り制御する方法がよく 分からなくてTaskクラスでWaitすれば出来るとかって結論に達したんでないかと 思うのだけど・・・ まず、async指定されたメソッドは呼び出されるとメソッド全体を別スレッドとして 起動して処理を元のスレッド(この場合STAスレッド)に戻します asyncメソッドの中でawaitを指定すると、メソッドの内容に関係なく元のスレッドに 戻るのは変わらないですが、asyncメソッドの中でawaitで指定されたメソッドが 終了するまでasyncメソッドのスレッドだけが待ち状態になり、awaitから返って くるとawait以降を実行しasyncメソッドの最後まで行くとasyncメソッドのスレッド だけが終了されます 検証してないので予想なのですが、Taskクラスで管理するスレッドを起動して いない(Task.Run)状態でWaitをかけるとSTAスレッドを待つためにsleepして しまいますがSTAスレッドはループスレッドなので当然いつまで待っても終了 しません asyncスレッドではawaitの処理が終わって復帰しようとしても元になるSTA スレッドがsleep状態なので、こちらもawaitから返ってこないみたいなことが 起こっているのだと思います 2のコンソールアプリの場合にはループスレッドではないのでMainの処理が 終了した時点で続きが動くのではないかと 3は正しい使い方で、STAスレッドは動かしたままbutton1_Clickメソッドが別スレッドで 動作する際にclient.GetStringAsyncの処理を待っているので普通に動作します button1_Clickの中で待つのであればasyncメソッドを作る意味がないですし、async メソッドで裏で動かすのであればbutton1_Clickで待ってはいけないので3の様な 形で実装するか、asyncメソッドの返却値をただのstringにして、textBox1.Textに メソッドの返却値が入る形式に変える(こっちは試してないので嘘かも)のが正解じゃ ないかな 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch