我想知道在wpf应用程序中编写此类代码是否正常,以便我可以捕获异常并在UI上显示一些消息:
Task.Factory.StartNew(() =>{
try
{
if (AuthenticationManager.Instance.Authenticate(username, password))
{
...
}
else
{
throw new AuthenticationException("Failed");
}
}
catch (Exception ex)
{
Dispatcher.Invoke((Action)(() => txtWarning.Text = ex.Message));
}
});
因此,此代码将在UI线程上显示错误消息。如果这是“OK”那么为什么每个人都建议使用t.Wait();
然后捕获任务中出现的所有异常?
PS,可能是问题很愚蠢,但我没有找到适当的解释,并且对使用任务不熟悉。
更新
This Joe Albahari's文章帮助我理解了任务。
答案 0 :(得分:4)
TPL努力为您处理异常并将其移出您的任务之外。
因此,虽然您可以在任务本身中捕获它们,但这应该是规则的例外。
通常,您确实希望处理等待点周围的异常。如果在GUI上显示消息,立即消除Dispatch问题。