2

現在、私は Window Workflow Foundation 4 によるページ ナビゲーション コントロールを含むプロジェクトを行っています。これは、WF スレッドが URL を返すまで UI スレッドをブロックすることで実現できます。

しかし、これも実用的ではありません。私の WF の処理時間が長い場合、UI スレッドは一定時間停止し、ユーザーはそれを認識していません。

URL/ページ データを WF4 から非同期に返し、UI でキャッチできるガイド。

4

1 に答える 1

0

いくつかのオプションがありますが、すべてマルチスレッド アプリケーションの作成に関連しています。

BackgroundWorker最も簡単な*アプローチは、クラスを使用することだと思います(使用例)。

その他のオプションには、.NET 4.5 で使用可能なasyncandawaitキーワードの使用が含まれます (このバージョンの 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

于 2013-07-16T05:42:50.777 に答える