需要设置子线程 ApartmentState 为 STA 模式,但 Task 又不能直接设置 ApartmentState,因此需要用 Thread 来封装一下。

using System.Threading;
using System.Threading.Tasks;public static Task<T> StartSTATask<T>(Func<T> func)
{var tcs = new TaskCompletionSource<T>();var thread = new Thread(() =>{try{tcs.SetResult(func());}catch (Exception e){tcs.SetException(e);}});thread.SetApartmentState(ApartmentState.STA);thread.Start();return tcs.Task;
}var task = StartSTATask<WebBrowser>(() =>
{WebBrowser browser = new WebBrowser();return browser;
});

ApartmentState.STA相关推荐

  1. Thread\Threading.Timer\Task中ShowDialog()方法报错:“在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式”

    在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttribute 标记. 出错环境: 1.在Thread线程中,调用Show ...

  2. C#异常解决:在调用OLE之前,必须将当前线程设置为单线程单单元(STA)模式。

    问题来源: 昨晚上在调试数据库大作业的时候,我在注册界面Register里点击"上传头像"这个linklabel时,程序出现了一个异常:在调用OLE之前,必须将当前线程设置为单线程 ...

  3. 线程sta模式_C# 设置为单线程单元(STA)模式

    这个问题:在可以调用OLE之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的Main函数带有STAThreadAttribute标记然后网上搜的解决方法:ThreadnewThread;p ...

  4. 在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式

    在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式.请确保您的 Main 函数带有 STAThreadAttribute 标记. 只有将调试器附加到该进程才会引发此异常. 程序之前 ...

  5. WinForm导出文件,你懂的……

    好久没有写文章了,下面把自己最近程序中用到的一个小小的导出文件的方法给在家分享一下,欢迎大家来排砖,谢谢~不说废话了,直接上代码: 1 using System; 2 using System.Col ...

  6. [转]WinForm下Splash(启动画面)制作

    本文转自:http://www.smartgz.com/blog/Article/1088.asp 原文如下: 本代码可以依据主程序加载进度来显示Splash.     static class Pr ...

  7. xps文档打印后winform界面文字丢失

    xps文档打印后winform界面文字丢失 原文:xps文档打印后winform界面文字丢失 最近做的xps文档打印功能,绝对的一波三折,一开始开发的时候,始终用的是xps writer 虚拟打印机, ...

  8. WinForm界面开发之 启动界面

    我们在开发桌面应用程序的时候,由于程序启动比较慢,往往为了提高用户的体验,增加一个闪屏,也就是SplashScreen,好处有:1.让用户看到加载的过程,提高程序的交互响应:2.可以简短展示或者介绍程 ...

  9. 从一个实际的例子来了解线程套间模型(.NET and COM interop)

    问题实例: 前些天有一个开发者在微软MSDN .NET开发者论坛上问了一个这样的问题: "I create multiple instances of MSScriptControlClas ...

最新文章

  1. 再见,Kaggle!
  2. ARM linux的启动部分源代码简略分析
  3. AgileEAS.NET平台开发实例-药店系统-数据库还原
  4. 代理服务器ip地址如何获得_详细教程:如何使用代理服务器进行网页抓取?
  5. Jmeter===Jmeter中使用CSV Data Set Config参数化不重复数据执行N遍(转)
  6. 12.18栈、队列练习题
  7. 《剑指offer》面试题60——把二叉树打印成多行(C++)
  8. java 双冒号_Java 双冒号::是什么操作符?
  9. 再聊如何通过基金定投达到十年十倍?
  10. 【产量预测】基于matlab BP和GRNN神经网络预测粮食产量【含Matlab源码 1247期】
  11. java和eova的关系_Eova 1.1 发布,Java Web 快速开发平台
  12. dcdc升压计算器excel_DC-DC电路计算器app下载|DC-DC电路计算器安卓版下载_v1.0.1_9ht安卓下载...
  13. 蔡维德:Libra如果脱钩美元 美国第二天就让它下市
  14. 分析系统业务流程和绘制系统业务流程图
  15. android 开发闪屏动画,Android闪屏效果实现方法
  16. 1106 Lowest Price in Supply Chain (25分)
  17. 用HTML和JavaScript写的RSA加密小工具
  18. 分布式架构-ZK客户端工具Curator框架分布式锁及基本使用
  19. 1276 不浪费原料的汉堡制作方案(二元一次方程)
  20. 杭州电子科技大学acm--2022

热门文章

  1. OpenCV非真实感渲染的实例(附完整代码)
  2. 在Qt Designer中使用自定义Widgets小部件
  3. C语言Prims求最小生成树MST的算法(附完整源码)
  4. OpenGL raytracer光线追踪的实例
  5. 「Ubuntu: Conda」Conda相关命令
  6. MySQL索引介绍,普通索引,全文索引,空间索引,多列索引使用原则,建立索引常用的规则
  7. 1、代码中设置编码、编辑器中设置Python的编码
  8. 你该认识这样的Linux_shell之循环控制
  9. Virtaulbox虚拟机添加磁盘
  10. Hadoop手动升级HA配置手册