我正在VS2010中开发VSTO Outlook加载项。在该ThisAddIn_Startup
方法(外接程序启动时称为)中,我的代码需要检查Outlook是否在公司网络上运行。如果Outlook未在网络上运行,则大约需要3秒钟才能得到答案。因此,我将代码包装在一个Task中,以使其运行Async以确保它在检查时不会挂起Outlook。
例如
bool onNetwork = false; Task task = Task.Factory.StartNew(() => { onNetwork = IsConnectedToNetwork(); });
完成检查后,需要加载并显示相关表格。所以我将代码更改为:
Task task = Task.Factory.StartNew(() => { if (IsConnectedToNetwork()) { OnNetworkForm onNetworkForm = new OnNetworkForm(); onNetworkForm.Show(); } else { OffNetworkForm offNetworkForm = new OffNetworkForm(); offNetworkForm.Show(); } });
但是需要将窗体加载到UI线程上。否则,InvalidOptionationException
当它尝试加载并显示带有消息的表单时,我得到一个提示:
调用线程必须是STA,因为许多UI组件都需要STA。
我的问题是如何使窗体加载到UI线程上?
请注意
我不能使用await,因为那是C#5.0,而VS 2010不支持C#5.0。而且ThisAddin类不是控件,因此没有可用的BeginInvoke
or Invoke
方法。