在 VSTO 中使用 async/await 的跨线程操作无效
Cross-thread operation not valid using async/await in VSTO
我得到一个
Cross-thread operation not valid
...以下代码出错。我以为 async/await 会处理这个问题,但显然不会。奇怪的是,当我注释掉 textBoxUser.Enabled = false
时,错误消失了。想法?
private async void buttonPopulate_Click(object sender, EventArgs e)
{
textBoxUser.Enabled = false;
await Populate();
textBoxUser.Enabled = true; //error here
}
您的问题可能是由于 VSTO 没有正确提供 SynchronizationContext
;这是 Office 插件系统长期存在的问题。您可以通过检查事件处理程序开头的 SynchronizationContext.Current
的值来验证这一点;如果是null
,那么就是VSTO的问题。
要解决此问题,您可以在任何 async void
事件处理程序的开头执行此操作:
SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());
我得到一个
Cross-thread operation not valid
...以下代码出错。我以为 async/await 会处理这个问题,但显然不会。奇怪的是,当我注释掉 textBoxUser.Enabled = false
时,错误消失了。想法?
private async void buttonPopulate_Click(object sender, EventArgs e)
{
textBoxUser.Enabled = false;
await Populate();
textBoxUser.Enabled = true; //error here
}
您的问题可能是由于 VSTO 没有正确提供 SynchronizationContext
;这是 Office 插件系统长期存在的问题。您可以通过检查事件处理程序开头的 SynchronizationContext.Current
的值来验证这一点;如果是null
,那么就是VSTO的问题。
要解决此问题,您可以在任何 async void
事件处理程序的开头执行此操作:
SynchronizationContext.SetSynchronizationContext(new WindowsFormsSynchronizationContext());