gpt4 book ai didi

c# - 使用任务时如何在 STA 线程上运行

转载 作者:太空宇宙 更新时间:2023-11-03 20:05:41 36 4
gpt4 key购买 nike

<分区>

我正在 VS2010 中开发 VSTO Outlook 加载项。在 ThisAddIn_Startup 方法(加载项启动时调用)中,我的代码需要检查 Outlook 是否在公司网络上运行。如果 Outlook 未在网络上运行,大约需要 3 秒才能返回答案。因此,我将代码封装在一个任务中,使其异步运行,以确保它在检查时不会挂起 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:

The calling thread must be STA, because many UI components require this.

我的问题是如何让表单在 UI 线程上加载?

请注意

我不能使用 await,因为那是 C# 5.0,而 VS 2010 不支持 C# 5.0。ThisAddin 类不是控件,因此没有可用的 BeginInvokeInvoke 方法。

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com