-1

C# でコード (またはメソッド) のブロックを実行したいと考えています。このブロックでは、Web サービス メソッドを使用します。タイムアウトを使用して(アプリケーションのフリーズを回避するために)非同期で実行したい。私のコードは次のとおりです。

SmsSender s = new SmsSender();

dataGrid.ItemsSource = 
    s.GetAllInboxMessagesDataSet().Tables[0].DefaultView;

この前に、thread.Abort を使用します。ついにそのスレッドを見つけました.Abrotは悪です

私を助けてください

4

2 に答える 2

0

この問題にはさまざまな解決策があります (メイン スレッドをフリーズしないこと)。私の解決策は、1 つのタスクを作成し、その中で待機する 2 つ目のタスクを作成することです。ラッパー タスクは待機または結合によってブロックされないため、メイン スレッドはブロックされません。イベントを使用して、ワーカータスクがタイムアウトしたかどうかを発信者に通知できます。コードは次のようになります。

// create asynchronous task. in order not to block the calling thread,
// create and start another task in this one and wait for its completion
var synchronize = new System.Threading.Tasks.Task(() =>
{                   
    var worker = new System.Threading.Tasks.TaskFactory().StartNew(() =>
    {
        // do something work intensive
    });                 
    var workCompleted = worker.Wait(10000 /* timeout */);
    if (!workCompleted)
    {
        // worker task has timed-out
    }
});
于 2013-10-31T22:38:30.390 に答える