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

 网赚交流大厅算_817 发布于 2023-01-15 15:57

我正在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类不是控件,因此没有可用的BeginInvokeor Invoke方法。

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有