背景:我曾在表單加載期間調用存儲過程。然而,由於這導致了不太理想的用戶體驗,我把自己的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線程上完成我的任務完成回調?每當任務完成時,如果出現錯誤,並且只有出現錯誤(布爾結果返回false),用戶纔會彈出消息框。在此之前,他可以繼續在表單上完成其他與數據庫無關的內容。請告知我如何在非GUI線程中獲得任務完成回調並顯示任務結果。謝謝
這看起來對我來說,它應該已經工作 - 你可以張貼代碼或僞代碼爲myCallBack函數()方法? – Stuart
我相信你可以使用TaskScheduler.Default來獲得一個沒有綁定到同步上下文的調度器。事實上,您看到此問題意味着TaskScheduler.Current在某個時刻被設置爲一個sycnchronized任務調度程序。 –
@Stuart。如果其他人對此問題的建議不起作用,將會發布一些示例代碼。thx – Gullu