在能夠調用 OLE 以前,必須將當前線程設置爲單線程單元(STA)模式

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

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

在運行時,報了以下錯誤spa

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

解決辦法有兩種:code

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

        [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();

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

相關文章
相關標籤/搜索