Watin ApartmentState.STA线程和父线程之间的共享变量?

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()查找一个包含CSV url的字符串值。然后我想使用该字符串来下载CSV并处理它。
问题出在当我尝试在findHiddenURL()内设置finalValueFromWeb的值时,此过程失败。异常消息显示为The Object Reference is not set to an instance of an object
请问有谁能告诉我如何解决这个问题?做这种事情的正确方式是什么?谢谢。

避免在调用Close()后使用从Watin返回的对象。先获取你需要的字符串。 - Hans Passant
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;   
        }
    }

我尝试了你的建议 - 它在同一个地方失败了 - 当我试图在findHiddenURL方法内改变finalValueFromWeb的值时,该方法就会失败! - ke3pup
什么是异常?你可以尝试调试并查看变量中放置了什么? - abuseukk
我认为在你的情况下,当你尝试访问Link.Url时,链接为空,你能检查一下吗? - abuseukk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接