2017-02-17 48 views
0

我正在嘗試使用編碼的用戶界面在控制檯應用程序中工作的自動化腳本(不是用於測試目的)。編碼的用戶界面中的DrawHighlight()不能在C#控制檯應用程序中工作

這個網頁對我很有幫助。 http://blogs.microsoft.co.il/shair/2010/07/15/running-codedui-test-from-another-application/

但是,如果我用DrawHighlight(),我會得到下面的異常

System.InvalidOperationException:{ 「調用線程必須爲STA,因爲許多UI組件都需要這個。」}

我對這個例外做了一些研究,所有的解決方案都是針對WPF或winform應用程序的,我無法爲我工作。

我的程序低於:

using Microsoft.VisualStudio.TestTools.UITesting; 
using Microsoft.VisualStudio.TestTools.UITesting.HtmlControls; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Playback.PlaybackSettings.SearchTimeout = 10000; 
      Playback.Initialize(); 
      var browser = BrowserWindow.Launch("https://www.google.com/"); 
      HtmlEdit uIGoogleEdit = new HtmlEdit(browser); 
      uIGoogleEdit.SearchProperties.Add(HtmlControl.PropertyNames.Name, "q"); 
      uIGoogleEdit.DrawHighlight(); 
      //......(do something here)...... 
      Playback.Cleanup(); 
     } 
    } 
} 

下面是一段代碼,我曾經嘗試過,但沒有工作(在上面取代 「uIGoogleEdit.DrawHighlight()」):

 Thread myThread = new Thread(new ThreadStart(delegate() 
     { 
       Dispatcher.CurrentDispatcher.Invoke(
        DispatcherPriority.Normal, 
        new Action(delegate() 
        { 
         uIGoogleEdit.DrawHighlight(); 
        })); 
     })); 

     myThread.SetApartmentState(ApartmentState.STA); 
     myThread.Start(); 

回答

0

我自己找到了解決方案:在Main函數之前添加[STAThread],然後代碼工作。

[STAThread] 
    static void Main(string[] args) 
相關問題