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

标签 c# watin

我试图让 Watin 在我的 SSIS 脚本任务中工作,通过在新线程中打开 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

有人可以告诉我应该如何解决这个问题吗?做这种事情的正确方法是什么?谢谢

最佳答案

使变量成为类的成员并尝试锁定它。你可以使用 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;   
        }
    }

关于c# - Watin ApartmentState.STA 线程和父线程之间的共享变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13949203/

相关文章:

nunit - 使用 Nunit 计时问题进行 Watin 单元测试

c# - 如何在我的 C# 浏览器中单击非 ID java 按钮?

watin - 使用SpecRun时WatiN引发错误

c# - "Object Reference"未在实体容器上设置保存更改

internet-explorer-9 - Watin 2 和 IE 9 下载管理器

c# - 如何从 url 获取 json 字符串?

c# - IIS 输出缓存 - 如何将资源添加到缓存,无论路径如何

unit-testing - 与 MSTest 共享单元测试

c# - 从列表创建滑动窗口

c# - 创建适用于 System.Object 的扩展方法的良好做法?