2016-08-02 5 views
1

より古い.NET 4.0相当のインターフェイスまたはクラスIProgress(.NET 4.5からのみ使用可能)は、タスクからUIへの進捗状況の送信に使用できますか?IProgress <T> in .NET 4.0

また、独自のクラス/インターフェイスを作成する必要がありますか?

+0

私はあなた自身のインターフェイスを定義する必要があると思う、ちょうどnet 4.5からIProgressのような同じメンバーが含まれていることを確認してください/ – tym32167

答えて

3

IProgress<T>には実際には2つの部分があります:インターフェイス自体と提供された実装Progress<T>です。技術的には、インターフェイスはクロススレッドサポートを必要としませんが、もちろんそれは実際にどのように使用されています。

インターフェイスは、.NET 4.5のドキュメントから逐語的にコピーできます。それは単なる宣言です。しかし、それが有用であるためには、それを実装したいと思うでしょう。そのためには、を使用して、ProgressChangedイベントのクロススレッド呼び出し、またはProgress<T>コンストラクタに提供されたハンドラを処理する必要があります。全体を書くことはできますが、.NETソースコードからコピー/貼り付けするのは妥当です。http://referencesource.microsoft.com/#mscorlib/system/progress.cs,d23df0450d3fd0d6

これは比較的シンプルなクラスであり、再実装するのは難しくありませんが、存在してはいけません他の4.5の機能を必要とする実際の.NET実装については、ソースからのコピー/ペーストがうまくいくはずです。

これに相当する機能は、実際には、以前のバージョンの.NETではBackgroundWorkerクラスの形式で使用できることに注意してください。これは、通常、非同期操作でIProgress<T>と一緒に使用される非同期実行と、ProgressChangedイベントとを組み合わせて、非同期操作で進行状況を報告できるようにします。 4.53より前の.NETバージョンは、で通常使用されるTPLサポートも含まれているため、BackgroundWorkerを使用すると、4.5より前のレガシーコードのコンテキストではおそらく意味があります。