この COMException は、ブラウザ オブジェクトがビジーであることを示します。現在のスレッドをスリープ状態にするのは良い考えではなく、あなたのケースは有害であるため、これは私には思えます。
これをメイン UI スレッドで実行していると仮定しているため、メイン メッセージ ポンプ/キューが強制終了されています。
Windows フォームや WPF など、使用している UI フレームワークに応じて、この問題を解決するためのソリューションは多数あります。
.Net 4.5 を使用している場合、またはそれを使用する余裕がある場合でも、そこに導入されたタスクおよび非同期機能に基づくソリューションを使用することもできます。
これが私がお勧めする解決策ですが、それだけではありません。
このメソッドを実装します。
public static class UICallbackTimer
{
public static void DelayExecution(TimeSpan delay, Action action)
{
System.Threading.Timer timer = null;
SynchronizationContext context = SynchronizationContext.Current;
timer = new System.Threading.Timer(
(ignore) =>
{
timer.Dispose();
context.Post(ignore2 => action(), null);
}, null, delay, TimeSpan.FromMilliseconds(-1));
}
}
次に、コードから呼び出します。
if (find("Doesn't exist"))
{
UICallbackTimer.DelayExecution(TimeSpan.FromSeconds(10),
() => button2.PerformClick());
}
この問題に対するさまざまな解決策を説明する SO に関する記事はたくさんあります。