1

我是 WatiN 的新手,但做了一些应用程序,它非常好。问题是我的程序在执行一些网络操作时没有响应。

这是我的 WatiN 源代码:

using (var ie = new IE())
{
    StreamWriter wr = new StreamWriter(textBox1.Text+".txt");

    ie.GoTo("http://twitter.com/"+textBox1.Text+"/followers");

    string dm1 = ie.Body.Parent.OuterHtml;

    Match match1 = Regex.Match(dm1, "(?<=<strong>).*?(?=</strong> Followers)");
    string ck = match1.ToString();
    ck = ck.Replace(",", "");
    long check = Int64.Parse(ck);
    long n= 0;
    string pattern = "(?<=data-screen-name=\").*(?=data-name)";

    while (n <= check)
    {
        WatiN.Core.Settings.WaitUntilExistsTimeOut = 1;
        var focusme = ie.Div(Find.ByClass("stream-loading"));
        var element = focusme.NativeElement as IEElement;
        element.AsHtmlElement.scrollIntoView();

        string dm = ie.Body.Parent.OuterHtml;
        MatchCollection matches1 = Regex.Matches(dm, pattern);
        n = matches1.Count;
        label4.Text = n.ToString();
    }
    string dom = ie.Body.Parent.OuterHtml;

    MatchCollection matches = Regex.Matches(dom, pattern);
    foreach (Match match in matches)
    {
        string usr0 = match.ToString();
        int i = usr0.IndexOf("\"");
        string usr = usr0.Substring(0, i - 1);
        wr.WriteLine(usr);
    }
    label4.Text = label4.Text + " done";

    wr.Close();
}

这是将 twitter 关注者放入文件的来源。这只是一个随机示例,但在执行此操作时,我的程序没有响应。我想我必须为此操作创建一个新流程,但不知道如何进行。

编辑:我在 button1_Click 中使用它,所以基本上在 Form1 类中。

4

1 回答 1

1

关于这些问题的材料有很多——这不是 WatiN 的问题,而是设计的问题。您应该在 BackgroundWorker 中移动 WatiN 核心,这样 UI 在执行 WatiN 代码时就不会挂起。

WinForm 应用程序 UI 在长时间运行期间挂起

Windows 窗体应用程序 - 缓慢/无响应的 UI

还有一些指南:

http://www.codeproject.com/Articles/58292/Basic-Backgroundworker

http://www.dotnetperls.com/backgroundworker

于 2012-10-10T11:01:39.717 回答