3

我一直在寻找这个问题的答案,但在任何地方都找不到。

我编写了一个使用 Watin 的应用程序。它工作正常,除了如果我在 Watin 完成所有操作之前单击“X”按钮关闭应用程序(我猜是在它被处理之前),它不会关闭。我的应用程序仍在运行(尽管表单不再存在),以及所有 IE 实例。

我想我应该使用 FormClosing 事件处理程序来杀死 Watin,但是由于我使用的是 using 语句,所以我不知道如何实现。这是我正在使用的一段代码:

using (var newBrowser = new IE("http://address.com"))
{
   AnalyzeTools FormActions = new AnalyzeTools(progressBar, labelProgress, labelProgressOutOf, richBoxKeywords.Lines.Count());

   Analyzer Analytic = new Analyzer(newBrowser, richBoxKeywords.Lines.ToList<string>(), FormActions);
   BeingAnalyzed = Analytic;

   Analytic.Initialize(textBoxLogin.Text, textBoxPass.Text);
   Analytic.HandleAnalysis();
}

编辑: 好的,我做了更多的故障排除,这就是我想出的:该应用程序一直在工作,直到它完成,就这么简单。但是它并没有“正确”完成——它崩溃了,因为它无法访问不再存在的表单。

我相信我可以通过创建一个 FormClosing 或 FormClosed 事件来解决这个问题,当触发时,它会修改我的应用程序的行为。自定义“退出”方法。但是,我不会终止 Watin(我想做的事情),并且该应用程序仍将运行。

问题是,我真的不需要它来完成它应该做的所有动作。

我的终止想法是个好主意吗?有没有办法在不放弃使用语句的想法的情况下终止 Watin?

编辑2: 好的,我尝试了一些新东西。我创建了那个要求做出决定的消息框。我尝试使用 Application.Exit() 来终止,但它并没有像我希望的那样工作。该应用程序的 vshost 仍在运行(WatiN?)。所以我想我的问题是这样的:终止 WatiN 以删除 using 语句、使 IE 对象在类中的任何位置可用并在用户选择终止它时将其处置的唯一方法是什么?

4

2 回答 2

1

您使用的是哪个版本的 WatIn

Watin 对这项工作有一个特定的处置方法

browser.Dispose();
于 2013-06-24T12:02:52.827 回答
1

我认为您需要做的是创建一个 IE 实例,然后关闭该实例。当您再次需要它时,您可以重新创建实例。很久以前我在 Stackoverflow 上发现了这个,当时我遇到了一个类似的问题,但我再也找不到它来链接它了。

public sealed class BrowserIE
{

    static readonly IE _Instance = new IE();

    static BrowserIE()
    {}

    BrowserIE()
    { }

    public static IE Instance
    {
        get { return _Instance; }
    }
}

使用上面的代码创建一个类。利用

var browser = BrowserIE.Instance("myUrl");

完成后使用:

browser.Close();

希望这可以帮助。如果您有任何其他问题,我会尽力提供帮助。

于 2013-06-12T15:52:28.800 回答