だから私はマルチスレッドで遊んでいます。ファイルからデータをロードしているときにポップアップするのにしばらく時間がかかる特定のフォームがあります。私のアイデアは、バックグラウンドでデータをロードすることでしたが、それでもフォームを表示し、追加のデータがロードされていることを示すメッセージをフォームに表示します。
スレッドが完了したことを通知する方法がわからず、データを辞書として渡す準備ができていることを除いて、すべて完了しました。
これは私が得た限りです:P
Dim t1 As Task(Of Dictionary(Of String, Double()))
Private Sub cbchannels_SelectedIndexChanged(sender As Object, e As EventArgs) Handles cbchannels.SelectedIndexChanged
t1 = Task(Of Dictionary(Of String, Double())).Factory.StartNew(Function() Load_Data())
End Sub
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
If t1.IsCompleted Then
data = t1.Result
End If
End Sub
タスクには、完了したかどうかを確認して結果を取得する機能があることを知っています
t1.IsCompleted
t1.Result
タスクが唯一の方法で完了したかどうかを継続的にチェックするためにタイマーを使用していますか?そして、私がしていることは理にかなっていますか?BackgroundWorkerを使用したくありません。
そのタイマーはとても賢いです。幸いなことに、直接通知を受けることでした。そのタスクが完了したときに呼び出されるコールバックを登録するためContinueWith
にanyTask
を呼び出すことができます。これは尋ねられたようにあなたの質問に答えます。
代わりに、非同期を調べて待つ必要があります。UIアプリでのバックグラウンド作業の実行は、C#5ではるかに簡単になりました。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加