3

私はSSISスクリプトタスクでWatinを動作させて、新しいスレッドでIEを開き、何かを実行し、最終的な値を見つけて、基本的に親スレッドでその値を返す/設定することで自動化を実行しようとしています。

だから私は今のところこれを持っています:

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()でいるのは、CSVURLを含む文字列である値を見つけることです。次に、その文字列を使用してCSVをダウンロードして処理します。

問題は、プロセスが失敗するfinalValueFromWeb内部の値を設定しようとしたときです。findHiddenURL()例外メッセージにはThe Object Reference is not set to an instance of an object

誰かが私がこの問題についてどうすべきか教えてもらえますか?この種のことを行う適切な方法は何ですか?ありがとう

4

1 に答える 1

1

変数をクラスのメンバーにして、ロックしてみてください。あなたはc#ロックを使うことができます:

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;   
        }
    }
于 2012-12-19T09:46:10.360 に答える