背景:我曾在表单加载期间调用存储过程。然而,由于这导致了不太理想的用户体验,我把自己的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