現在、私は Window Workflow Foundation 4 によるページ ナビゲーション コントロールを含むプロジェクトを行っています。これは、WF スレッドが URL を返すまで UI スレッドをブロックすることで実現できます。
しかし、これも実用的ではありません。私の WF の処理時間が長い場合、UI スレッドは一定時間停止し、ユーザーはそれを認識していません。
URL/ページ データを WF4 から非同期に返し、UI でキャッチできるガイド。
現在、私は Window Workflow Foundation 4 によるページ ナビゲーション コントロールを含むプロジェクトを行っています。これは、WF スレッドが URL を返すまで UI スレッドをブロックすることで実現できます。
しかし、これも実用的ではありません。私の WF の処理時間が長い場合、UI スレッドは一定時間停止し、ユーザーはそれを認識していません。
URL/ページ データを WF4 から非同期に返し、UI でキャッチできるガイド。
いくつかのオプションがありますが、すべてマルチスレッド アプリケーションの作成に関連しています。
BackgroundWorker
最も簡単な*アプローチは、クラスを使用することだと思います(使用例)。
その他のオプションには、.NET 4.5 で使用可能なasync
andawait
キーワードの使用が含まれます (このバージョンの dotNET を使用している場合)。古いバージョンを使用していて を使用したくないBackgroundWorker
場合は、このクラスを使用してTask
バックグラウンド タスクを作成できます。さらに原始的な方法には、Thread
インスタンスの使用と管理が含まれます (Task
クラスが使用できない場合)。WF 4 を使用しているため、新しい手法のいくつかは問題なく機能するはずです。;)
マルチスレッドを始めたほとんどの人が忘れていることに注意してください (そこにいて、それを行っています) - 別のスレッドから UI スレッド (アプリのメインスレッド) に属するリソースにアクセスすることはできません! これが、必要に応じて UI で何かを実行できるようにBackgroundWorker
する 2 つのイベント (ProgressChanged
および) を公開するため、開始に適したソリューションである可能性がある理由です。RunWorkerCompleted
* - 最も簡単というのは、最も簡単に始められるという意味です。たとえば、async
/await
は多くの異なる非同期操作を実行する必要があるアプリケーションに適していますが、一般的なマルチスレッドのコツをつかむまでは、それほど簡単ではありません。
実際には、アプリケーションが実行する非同期操作の数を指定しておらず、.NET 4.0 によって制限されていると述べていました (そうではありませんasync
/ await
)。多くの異なる操作を実行する必要がある場合は、Task
クラスを使用することをお勧めします。
少し努力すれば、タスクを使用して、実際に悪夢となるスパゲッティ コードの作成に頼ることなく、機能するマルチスレッド アプリケーションを作成できます。Begin-End
これは、サービスで非同期メソッドを使用している場合に特に役立ちますTask.Factory.FromAsync
。この場合、非常に役立ちます。イベント ドリブンの非同期サービスは、 を使用するインターフェイスも公開する必要がありますBegin-End
。