gpt4 book ai didi

c# - 与 UI 对话的线程?

转载 作者:行者123 更新时间:2023-11-30 19:10:43 25 4
gpt4 key购买 nike

我有这个代码:

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/

25 4 0
文章推荐: c# - List 到 List C#