私はWPFでアプリケーションを書いています。私は1つのメインスレッドと別の1つを持っています - 私は何かを計算します。メインスレッドでは、追加のスレッドが完了した後に1つの操作を行う必要があります。私はメインスレッドをブロックしたくないので、追加スレッドのためにJoinを使用することはできません。どのように私は2番目のスレッドを終了し、同時にメインスレッドをブロックしないで待つことができますか?WPFのスレッドに関する問題
2
A
答えて
3
一番良い方法は、backgroundworkerを使用してRunWorkerCompletedイベントを処理することです。
私も3 のジョゼフ・アルバハリのThreading in C# pdf
2
もう一つの簡単な方法は、continuationsとタスク並列ライブラリやチェーン複数のタスクを使用することです見て参加することを勧めます。
@コンラッドのアドバイスからあなたを免除するわけではありませんが、the threading bookを読んでください。それは魅力的で、努力の価値があります。
+0
@Anvanka +1続きは非常に良い選択肢です –
0
独自のスレッドを作成している場合に行うの時に、ワーカースレッドがコールバックメソッドを呼び出しています
public delegate void DoneDelegate (object calculationResults);
public class MyWorker
{
public DoneDelegate Done { get; set; }
public void Go()
{
object results = null;
// do some work
Done(results);
}
}
public class Main
{
public void StartWorker()
{
MyWorker worker = new MyWorker();
worker.Done = new DoneDelegate(DoneCallback);
System.Threading.Thread thread = new System.Threading.Thread(worker.Go);
thread.IsBackground = true;
thread.Start();
}
public void DoneCallback (object results)
{
// use the results
}
}
関連する問題
- 1. DirectShow/WPFスレッドの問題
- 2. レルムのスレッドに関する問題
- 3. ミューテックスとスレッドに関する問題
- 4. Java - スレッドに関する問題
- 5. WPFトリガーイベントに関する問題
- 6. ビデオドライバVS2012に関連するWPFのビルドに関する問題
- 7. スレッドの問題
- 8. スレッド内の変数の扱いに関する問題
- 9. スレッド内のdjangoのcall_commandに関する問題
- 10. WPF値の更新に関するバインドの問題
- 11. WPFでのRadioButtonsのCustomContainerに関する問題
- 12. スレッド初期化に関連するピントのスレッディング問題
- 13. タスク/スレッドに関するNinjectスコープの問題
- 14. スレッドに関するいくつかの問題
- 15. Wpf - コレクションアイテムへのバインドに関する問題
- 16. WPFポップアップとボタンのツールチップに関する問題
- 17. スレッドの問題JAVA
- 18. VB.Netスレッドの問題
- 19. Androidスレッドの問題
- 20. Javaスレッドの問題?
- 21. Androidスレッドの問題
- 22. アダプター+スレッドの問題
- 23. JavaFXスレッドの問題
- 24. スレッドの問題C#
- 25. 関数が返るまでスレッドをロックする際の問題?
- 26. WPFコマンド問題
- 27. wpf listview問題
- 28. WPFコンテンツアライメント問題
- 29. WPF&XAML問題
- 30. 問題オープンウィンドウWPF
うーん、私はそれが最善の解決策ではないと思います。キャンセルボタンをクリックすると、この追加のスレッドをキャンセルしたいと思います。私はバックグラウンドワーカーがCancelAsync()メソッドを持っていることを知っていますが、バックグラウンドワーカーで行うべきメソッドは独立して実行しています。私はこの機能で私は私が壊れる可能性がループがないが、私はちょうど最適化にシステム機能を呼び出すと私はそれを壊すことはできません。 @ ravenik。 – ravenik
どのソリューションを選択してもこの問題はありませんか? 'if(_bw.CancellationPending){e.Cancel = true;戻る; } '' e.result'を十分に設定する前に? –