0

リモート サーバーと多くの通信を行う WPF アプリケーションを使用しているため、UI を快適で応答性の高い状態に保つために、これらの操作を 2 番目のスレッドに配置しました。可能性は低いですが、そのスレッドがハングアップして永久にブロックされる可能性があるインスタンスがいくつかあります。thread.Abort() の呼び出しを伴わない「キャンセル」ボタンを実装する簡単な方法はありますか? 多くの人がそれを使用しないようにアドバイスしていますが、未公開のリソースを残したくありません。おそらく、スレッドに例外をスローさせる方法はありますか?

プログラムはバックグラウンド ワーカーを使用しないため、これはバックグラウンド ワーカーではないことをタイトルに明記しています。それはすでに普通の古いスレッドでコード化されています。

4

1 に答える 1

0

壊れたものを修正する必要があるというコメントには絶対に同意します。それが本当の問題だからです。.Net 4.0 を使用している場合は、Task ライブラリを使用します。タスクを作成し、別のスレッドで実行されるアクションに渡すことができます。重要なのは、キャンセル トークンをそのタスクに渡すことができるということです。

http://msdn.microsoft.com/en-us/library/dd997396.aspx

同じアクションを何度も実行する場合は、タスクのステータスを確認して、それについて何かを行うこともできます。

//this is just a sample
 if (myTask != null) //meaning it's still exe'ing your action
{
    if (myTask.Status == TaskStatus.Faulted) //there's some kind of a problem with exe'ing it
    myTask = null; // could reset to run the action again
    else
        return; //let the task finish
}

myTask = Task.Factory.StartNew (() =>
        {
            ExecuteUMyAction ();
        });
于 2012-04-25T16:47:09.657 に答える