我在一个单独的线程上运行一个进程,以方便并发和平滑的用户界面调用
private void ThreadedTestConnection(SqlConnection conn, bool bShowErrMsg)
{
Task<bool> asyncTestConn = Task.Factory.StartNew<bool>
(() => TestConnection(conn, bShowErrMsg));
return asyncTestConn.Result;
asyncTestConn.Dispose();
}
来自UI线程的。但是,由return asyncTestConn
引起的“等待”正在阻止UI线程释放回GUI。我提出了以下修复方法。从我从GUI发出的事件(不包括try
/ catch
块)
private void SomeClick_Event(object sender, EventArgs e)
{
Task testConnection = Task.Factory.StartNew
(() => UtilsDB.ThreadedTestConnection(mainConn, true));
}
这很有效。也就是说,它会在单独的后台线程上运行测试时立即将控制权返回给GUI。我这样做是一个非常愚蠢的男孩,还是这个好吗?
注意:这是一个单独的问题,但与this one有关我没有得到满意的答案。
答案 0 :(得分:1)
这是完全没问题的,你只是在一个线程池线程上运行的“即发即弃”任务 - 但是在第一个例子中你似乎期望得到一个结果(我假设一个布尔值表示是否连接测试是成功的) - 在第二个你不会有任何 - 除非你的任务,例如引发事件或调用预定义的回调。