余分なスレッドでresult
を実行した後に (重い処理の結果を返す) にアクセスできるようにしたい. 主に予想されるように, 処理中に UI が有効になったのは望ましくない. 処理が完了した後は、Heavy Process
result
いくつかの検索中に、これを実現するためのいくつかのアプローチがあることがわかった私の記事を見て、あなたが知っている、または同様の状況で使用する最良のアプローチを提供してください
これは、可能な限り最善の方法で対処したいサンプルです。
public ACollection DoProcess(Document docProcess)
{
ACollection result = new ACollection ();
ThreadStart threadStart = delegate
{
result = MyProcess(docProcess);
};
var threadProcess = new Thread(threadStart);
threadProcess.Start();
return result ;
}
他の可能なアプローチは、IAsyncResult、BackgroundWorker、タイマーを使用して状態をチェックすることです。結果をメソッドに返してそれを処理し、それを UI コントロールにスレッドセーフな方法で直接送信する代わりに ...
同様のケースであなた自身の意見とサンプルを教えてください、事前に感謝します
編集 3: アプローチ - ブライアンの回答に基づく
LenzCollection myResultCollection = new LenzCollection();
TaskScheduler ui = TaskScheduler.FromCurrentSynchronizationContext();
Task.Factory.StartNew(() =>
{
myResultCollection = DoCollect(docProcess);
//Task.WaitAll();
return myResultCollection;
}).ContinueWith((task =>
{
myResultCollection = task.Result;
}), ui);
return myResultCollection;
それはまだ待っていなかったので、望ましい結果が得られません