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();
}

編集: OK、さらにトラブルシューティングを行ったところ、これが思いついたものです。アプリは、すべてが完了するまで動作しています。単純です。しかし、それは「正しく」終了しません -- 存在しなくなったフォームにアクセスできないため、クラッシュします。

トリガーされたときにアプリの動作を変更する FormClosing または FormClosed イベントを作成することで、これを修正できると思います。カスタムの「終了」メソッド。それでも、Watin を終了することはなく (やりたいことです)、アプリは引き続き実行されます。

問題は、想定されているすべてのアクションを実行するために実際には必要ないということです。

終了の私の考えは良いものですか?using ステートメントのアイデアを削除せずに Watin を終了する方法はありますか?

EDIT 2: OK、いくつか新しいことを試しました。決定を求めるメッセージボックスを作成しました。Application.Exit() を使用して終了しようとしましたが、期待どおりに動作しません。アプリの vshost はまだ実行中です (WatiN?)。したがって、私の質問は次のようになると思います: WatiN を終了して using ステートメントを削除し、IE オブジェクトをクラス内のどこでも利用できるようにし、ユーザーが終了することを選択したときにそれを破棄する唯一の方法はありますか?

4

2 に答える 2

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 に答える