在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式


今天在winform中設置了combox的模糊查詢功能的相關屬性之后,

this.comboBoxPM.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.ListItems;
this.comboBoxPM.AutoCompleteMode = System.Windows.Forms.AutoCompleteMode.SuggestAppend;

在運行時,報了如下錯誤

 通過尋找相關資料,了解到了STA單元模式和COM對象,總的來說:winform中,很多控件是COM對象,這樣的對象只能被sta模式中的線程所調用。

解決辦法有兩種:

第一種:在主方法上加上[STAThread]特性標簽

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new LogInForm());
        }

第二種:將線程的單元狀態設置為單線程單元,thread.SetApartmentState(ApartmentState.STA);

Thread th = new Thread(()=> new Form1().ShowDialog());
th.SetApartmentState(ApartmentState.STA);
th.Start();

最終我使用第二種方式,解決了這個問題,因為我的主窗體是在登陸窗體中以線程的方式打開的(不以線程的方式打開新的窗體的話,就不能關閉當前的窗體了。),一開始沒有設置單線程單元模式,所以報了錯,以前也沒遇到過這樣的問題,花了一些時間終於解決了這個問題,記錄一下,以免忘記。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



猜您在找 在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式 異常錯誤:在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式 在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式,請確保您的Main函數帶有STAThreadAttribute標記。 多線程操作剪切板的時候。 在可以調用OLE之前,必須將當前線程設置為單線程單元(STA)模式,請確保您的Main函數帶有STAThreadAttribute 解決“System.Threading.ThreadStateException:“在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式。請確保您的 Main 函數帶有 STAThreadAttribute 標記。 只有將調試程序附加到該進程才會引發此異常”的異常 C#解決“System.Threading.ThreadStateException:“在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式。請確保您的 Main 函數帶有 STAThreadAttribute 標記。 只有將調試程序附加到該進程才會引發此異常”的異常 選擇目錄,選擇文件夾的COM組件問題。在可以調用 OLE 之前,必須將當前線程設置為單線程單元(STA)模式。請確保您的 Main 函數帶有 STAThreadAttribute 標記。 只有將調試器附加到該進程才會引發此異常。 如何解決C#異常:必須先將當前線程設置為單線程單元(STA)模式,然后才能進行OLE調用,請確保你的Main函數已在其上標記了STAThreadAttribute 當前線程不在單線程單元中,因此無法實例化 ActiveX 控件 類中調用界面ActiveX控件報錯當前線程不在單線程單元中因此無法實例化 ActiveX 控件的解決辦法
 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM