请选择 进入手机版 | 继续访问电脑版

马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#问题入口 ASP.NET问题入口

【C#问题提交】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接毕业设计】 面试-葵花宝典下载

官方一群:

官方二群:

查看: 377|回复: 0

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

[复制链接]
  • TA的每日心情
    开心
    前天 21:32
  • 签到天数: 1610 天

    [LV.Master]伴坛终老

    4251

    主题

    6177

    帖子

    11万

    积分

    管理员

    IBC编程社区-原道楠

    Rank: 9Rank: 9Rank: 9

    积分
    111382

    推广达人突出贡献优秀版主荣誉管理论坛元老

    发表于 2019-11-8 09:55:47 | 显示全部楼层 |阅读模式

    马上加入IBC,查看更多教程

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x

    本日在winform中设置了combox的暗昧查询功能的相关属性之后,

    1. this.comboBoxPM.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
    2. this.comboBoxPM.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;
    复制代码

    在运行时,报了如下错误

    095610j6bkkxpgz7pa7sxk.png

    通过探求相关资料,相识到了STA单位模式和COM对象,总的来说:winform中,很多控件是COM对象,如许的对象只能被sta模式中的线程所调用。

    解决办法有两种:

    第一种:在主方法上加上[STAThread]特性标签

    1. [STAThread]
    2. static void Main()
    3. {
    4. Application.EnableVisualStyles();
    5. Application.SetCompatibleTextRenderingDefault(false);
    6. Application.Run(new LogInForm());
    7. }
    复制代码

    第二种:将线程的单位状态设置为单线程单位,thread.SetApartmentState(ApartmentState.STA);

    1. Thread th = new Thread(()=> new Form1().ShowDialog());
    2. th.SetApartmentState(ApartmentState.STA);
    3. th.Start();
    复制代码

    终极我利用第二种方式,解决了这个标题,由于我的主窗体是在登岸窗体中以线程的方式打开的(不以线程的方式打开新的窗体的话,就不能关闭当前的窗体了。),一开始没有设置单线程单位模式,以是报了错,从前也没遇到过如许的标题,花了一些时间终于解决了这个标题,记载一下,以免忘记。

    C#论坛 www.ibcibc.com IBC编程社区
    C#
    C#论坛
    IBC编程社区
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则