背景:フォームロード中にストアドプロシージャを呼び出すことがありました。しかし、この結果、UIには次善の結果が得られたため、SPコールはShown
イベントの中で独自のタスクに入れました。これは通常、フォーム表示プロセスの最後のイベントであるため、フォームのロードイベントに物を入れるよりもはるかに良い結果になりました。私が持っている:非GUIスレッドでタスク完了通知を取得する方法
private void MainForm_Shown(object sender, EventArgs e)
{
dbCheckTask = Task<bool>.Factory.StartNew(RunSPAndCheckStuff());
// both of below run on the GUI thread.
// if I print the thread ID in mycallback it is the GUI thread id
dbCheckTask.ContinueWith(mycallback());
// I also tried below. But obviously, that too runs on the GUI thread
mycallback(dbCheckTask.Result)
}
彼らはGUIスレッドで火災ので、私のスタートアップフォームの塗料はまだ瞬間もスムーズでもありません。イベントに頼らずに、GUI以外のスレッドでコールバックを完了させるにはどうすればよいですか?タスクが完了し、何かが間違っていて何かが間違っている(bool結果がfalseを返す)場合にのみ、ユーザーはメッセージボックスポップを取得します。それまでは、彼は先に進んで、データベースに関連しない他のものをフォーム上で行うことができました。私はどのように非GUIスレッドでタスクの結果とタスク補完のコールバックを得ることができます助言してください。ありがとう
それはすでに動作するはずのようにこれは私には見えます - あなたはmycallback()メソッドのコードまたは擬似コードを投稿することができますか? – Stuart
私はあなたが同期コンテキストにバインドされていないスケジューラを得るためにTaskScheduler.Defaultを使うことができると信じています。この問題がまったく見つかっていないという事実は、TaskScheduler.Currentがある時点でsycnchronizedタスクスケジューラに設定されていることを示しています。 –
@Stuart。この質問に対する他の人の提案がうまくいかない場合は、サンプルコードを投稿します。thx – Gullu