Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c任务类的帮助_C#_Winforms - Fatal编程技术网

C# c任务类的帮助

C# c任务类的帮助,c#,winforms,C#,Winforms,我正在使用WatiN解析我的网站。我有一个按钮可以启动这个过程。我打开一个浏览器窗口并导航到需要去的地方,然后创建一个新任务,该任务调用一个名为DoWork的方法 我的问题是,如果我在DoWork结束时调用一个新方法来做其他事情,当我尝试让程序浏览我的网站时,我会得到奇怪的结果,但是,如果我不从DoWork调用这个新方法,只需将新方法挂接到一个按钮上,单击“一切正常”。所以我的问题是,我是否没有正确地从后台进程方法调用我的新方法Dowork 代码: 再次重申,如果我从Dowork调用newMet

我正在使用WatiN解析我的网站。我有一个按钮可以启动这个过程。我打开一个浏览器窗口并导航到需要去的地方,然后创建一个新任务,该任务调用一个名为DoWork的方法

我的问题是,如果我在DoWork结束时调用一个新方法来做其他事情,当我尝试让程序浏览我的网站时,我会得到奇怪的结果,但是,如果我不从DoWork调用这个新方法,只需将新方法挂接到一个按钮上,单击“一切正常”。所以我的问题是,我是否没有正确地从后台进程方法调用我的新方法Dowork

代码:

再次重申,如果我从Dowork调用newMethod,则行浏览器.SelectListFind.ByIDSelsStartYear.SelectByValuestartYear的行为不正常,但如果我从Dowork中删除对newMethod的调用,并将newMethod连接到一个按钮上,则可以正常工作。我想知道这是否与嫁妆作为背景任务有关


当我说它的行为不正常时,我的意思是当你从下拉列表中选择一个项目时,页面会自动发回,但是上面的代码行选择了它,但是页面不会发回,这是不可能的。如果我没有在DoWork中调用该方法,我就没有这个问题。

您正在从非UI线程修改UI元素。您已经有了通过Control.Invoke在DoWork中处理该问题的代码——您需要对newMethod执行同样的操作。在UI线程中调用整个方法可能是最简单的:

// At the end of DoWork
Action action = newMethod;
label.BeginInvoke(action);

我正在使用label.BeginInvoke,因为我不确定浏览器本身是否是一个普通控件,但无论如何,使用label都会找到正确的线程。如果browser.BeginInvoke可以编译,那就更清楚了。

我怀疑这是选择列表控件的问题。当我浏览网站时,我有时会通过键盘选择下拉项。有时,它只是不回发,而使用鼠标总是保证回发

我想你最好多加一个按钮,然后做一个browser.ButtonFind.ByIdbtnFilter.Click;这是一种调用回发的方式


如果浏览器中的函数没有执行正确的交叉线程检查,所说的应该会有所帮助。

非常感谢您。。。所以,如果我不是从一个非ui线程修改ui元素,我还需要调用newMethod吗?@Nick:假设你没有做任何其他需要你处于特定线程中的事情,那就好了。感谢你编辑了答案并添加了最后一点,很高兴知道这一点。此外,我尝试了浏览器,但它不工作。它说watincore.IE不包含Invoke的定义,所以这是您的答案。
// At the end of DoWork
Action action = newMethod;
label.BeginInvoke(action);