長時間実行される非同期タスクでWPFを使用してASP.NETアプリケーションを構築していますが、場合によっては、ユーザーに詳細情報を要求する必要があります。タスクを中断することはできますが、キャンセルすることはできず、ユーザーが応答するのを待って、結果に基づいて続行する方法はありますか?
私が見つけたのは、タスクの前後にコールバックを使用する方法だけです。Send()
メインスレッドから渡されたSynchronizationContextを介してUIスレッドメソッドを呼び出そうとしましたが、(場合によっては) Null参照例外がスローされます。
具体的には、このコードがSend()を呼び出すときにNullReferenceExceptionをスローする理由を理解できません。
protected void Page_Load(object sender, EventArgs e)
{
Task task = new Task(DoSomeWork, new Tuple<SynchronizationContext, object>(SynchronizationContext.Current, new object()));
task.Start();
}
public void DoSomeWork(object state)
{
Tuple<SynchronizationContext, object> cst = (Tuple<SynchronizationContext, object>)state;
cst.Item1.Send(Writer, "Message");
}
public void Writer(object s)
{
Label1.Text = (s as string);
}