表格关闭时如何处理IE?

时间:2012-11-28 19:34:42

标签: c# watin dispose

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

我写过一个使用Watin的应用程序。它工作正常,除了如果我点击“X”按钮关闭应用程序之前,在Watin完成所有操作之前(在它被丢弃之前,我猜),它不会关闭。我的应用程序仍在运行(虽然表单不再存在),以及所有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对象在类中的任何地方都可用,并在用户选择终止它时将其处理掉?

2 个答案:

答案 0 :(得分: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();
希望这会有所帮助。如果您有任何其他问题,我会尽力提供帮助。

答案 1 :(得分:1)

您使用的是哪个版本的WatIn

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

browser.Dispose();