我有这个代码:
private void buttonStart_Click(object sender, EventArgs e)
{
Task.Factory.StartNew(() => GeneraListaCartelle())
.ContinueWith(t => GeneraListaCartelleCompletata()
, CancellationToken.None
, TaskContinuationOptions.None
, TaskScheduler.FromCurrentSynchronizationContext());
}
private void GeneraListaCartelle()
{
try
{
... some operation ....
}
catch (Exception err)
{
txtErrors.AppendText(err.Message);
}
}
GeneraListaCartelleCompletata()
{
... process finished...
}
和 txtErrors
在“主”线程(UI)中。当我捕获到错误时,异步线程无法写入 UI 控件,并且我得到了一个无效的跨线程异常
。
我可以在线程内与 UI 对话吗?
最佳答案
如果您使用的是 WinForms,则需要在 UI 线程上调用您的方法,例如
catch (Exception err)
{
if(this.InvokeRequired){
Action<Exception> act = ((ex) => {
txtErrors.AppendText(ex.Message);
});
this.Invoke(act, new object[] { err });
}
else{
txtErrors.AppendText(err.Message);
}
}
如果您使用的是 WPF,则需要
catch (Exception err)
{
if(this.Dispatcher.CheckAccess()){
txtErrors.AppendText(err.Message);
}
else {
Action<Exception> act = ((ex) => {
txtErrors.AppendText(ex.Message);
});
this.Dispatcher.Invoke(act, new object[] { err });
}
}
关于c# - 与 UI 对话的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16076510/