この問題に対する答えを探していましたが、どこにも見つかりませんでした。
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 オブジェクトをクラス内のどこでも利用できるようにし、ユーザーが終了することを選択したときにそれを破棄する唯一の方法はありますか?