2012-12-19 378 views
3

我試圖讓Watin在我的SSIS腳本中工作任務通過在新線程中打開IE來執行一些自動操作,執行某些操作,找到最終值並基本在父線程中返回/設置該值。Watin ApartmentState.STA線程和父線程之間的共享變量?

所以我有這個現在:

public partial class TestWatin{ 

    public void Main() 
    {  
     String finalValueFromWeb = "";    
     Thread runnerThread = new Thread(delegate() { getDAFValue(ref finalValueFromWeb); }); 
     runnerThread.ApartmentState = ApartmentState.STA; 
     runnerThread.Start(); 
     runnerThread.Join(); 
     MessageBox.Show(finalValueFromWeb); 

     //here i want to use the value of finalValueFromWeb to download a file 
     //but if i try to access finalValueFromWeb the process would fail. 
    } 

    //do the Watin stuff here 
    public void findHiddenURL(String refObject) 
    { 
     //setup page controls, press search, grab the value of "hiddenURL" 
     IE ie = new IE("some_webadress_to_go_to"); 
     ie.Visible = false; 
     ie.SelectList("testID1").Option("Car").Select(); 
     ie.SelectList("testID2").Option("JAP").Select(); 
     ie.SelectList("testID3").Option("2012").Select(); 
     ie.Button("testSearch").Click(); 
     Link link = ie.Link("hiddenURL"); 
     ie.Close(); 

     //fails here? 
     refObject = link.Url;    
    } 
} 

我基本上要爲findHiddenURL()找我的值是一個包含一些CSV URL字符串。然後我想使用該字符串下載CSV並處理它。

問題是當我嘗試設置findHiddenURL()裏面finalValueFromWeb的值時,進程失敗。異常消息說The Object Reference is not set to an instance of an object

有人可以告訴我我該怎麼處理這個問題嗎?做這種事情的正確方法是什麼?謝謝

+0

避免。在此之前獲取您需要的字符串。 –

回答

1

使變量成爲類的成員並嘗試鎖定它。您可以使用C#鎖定:使用您調用Close之後得到了華廷回一個對象()

http://msdn.microsoft.com/en-us/library/c5kehkcz%28v=vs.71%29.aspx

protected string finalValueFromWeb ; 

.... 

public void Main() 
    { 
     ... 
     lock(finalValueFromWeb) 
     { 
      MessageBox.Show(finalValueFromWeb); 
     } 
    } 

public void findHiddenURL(String refObject) 
    { 
     ... 
     lock(finalValueFromWeb) 
     { 
      finalValueFromWeb = link.Url; 
     } 
    } 
+0

我試過你的建議 - 它在相同的地方失敗 - 當我嘗試更改find​​HiddenURL方法內的finalValueFromWeb的值該方法失敗! – ke3pup

+0

什麼是例外?您可以嘗試調試並查看變量中存在什麼內容? – Ivo

+0

我想你的情況下鏈接是null當你嘗試訪問Link.Url,你能檢查這個嗎? – Ivo