繁体   English   中英

跨线程操作在VSTO中使用异步/等待无效

[英]Cross-thread operation not valid using async/await in VSTO

我正在

跨线程操作无效

...以下代码有误。 我以为异步/等待会照顾这一点,但显然不是。 奇怪的是,当我注释掉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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM