2015-09-28 32 views
0

我正在開發一個應用程序,我需要在panl.php中插入一個webbrowser,同時這樣做我得到了desginer代碼中的錯誤「無法獲取WebBrowser的窗口句柄「控制。窗口的ActiveX控件不支持。」爲此,我已經把代碼後我得到的錯誤來運行它裏面STSthread.but‘橫紗。’在c#中插入webbrowser面板時出現錯誤#

Thread newThread = new Thread(newThreadStart(MethodToCallCOMMethod)); 
newThread.SetApartmentState(ApartmentState.STA); 
newThread.Start(); 
private void MethodToCallCOMMethod() 
     { 
      this.webBrowser1 = new System.Windows.Forms.WebBrowser(); 
      this.webBrowser2 = new System.Windows.Forms.WebBrowser(); 

      if (this.InvokeRequired) 
      { 
       this.BeginInvoke(new MethodInvoker(delegate 
           { 
            this.p_bottom.Controls.Add(this.webBrowser2); 

           })); 
      } 
      else 
      { 
       this.p_bottom.Controls.Add(this.webBrowser2); 
      } 
     } 

使用invokerequired我終究仍然得到「交叉線程錯誤: - 控制」從另一個線程,它是在C#中創建的「訪問,如何解決它..?請幫助我。

+0

所有的子控件必須由同一個線程創建。所以這是行不通的。你需要解決真正的問題,不管它是什麼。點擊Ask Question按鈕來獲得幫助。 –

回答

3

問題是你正在不同的線程中創建WebBrowsers,一般你不應該創建或編輯gui線程之外的控件。

所以要麼創建webBrowser1和2別的地方(在GUI線程),或者把代碼MethodInvoker委託內(運行在GUI線程)

如果說the current thread is not in a single-threaded apartment那麼無論你的主要功能沒有按」看起來像這樣(VS默認創建的)或者你試圖從另一個線程創建它們:

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

最初我在同一個線程內創建了webbrowsers,但後來我得到了「ActiveX控件」8856f961-340a-11d0-a96b-00c04fd705a2「的錯誤無法實例化,因爲當前線程不在單線程公寓中。」所以,我必須使用單獨的thread.but比我得到交叉線程錯誤.. –

+0

GUI線程是一個STA線程。除非你改變了你的program.cs(主窗體開始)。是你做的嗎?你確定你試圖在GUI線程中創建控件嗎? – x4rf41

+0

是的,我確定.. –

相關問題