実行中のIE8プロセスからSHDocVw.InternetExplorerインスタンスを取得する必要があるプログラムがあります。インスタンスを取得するには、以下のサンプルコードが実行されます。何らかの理由で、Thread.Sleepなしでは動作しません。私は、SHDocVw.ShellWindowsでThread.Sleepを使用するwan'tを使用していません。
Thread.Sleepが削除された場合、Browser.HWNDはm_IEFoundBrowsers内のすべてのインスタンスに対してInvalidCastExceptionをスローします。 Thread.Sleepを使用すると、IE8のウィンドウで動作します。
誰かがThread.Sleepを使用しないでこれを行う方法を知っていますか?
を(私は...通常、それだけで将来的に問題をプッシュし、スリープ機能を使用するために好きではない)のコード例:
InternetExplorer m_IEBrowser = null;
ShellWindows m_IEFoundBrowsers = new ShellWindowsClass();
Thread.Sleep(10);
foreach (InternetExplorer Browser in m_IEFoundBrowsers)
{
try
{
if (Browser.HWND == (int)m_Proc.MainWindowHandle)
{
m_IEBrowser = Browser;
break;
}
}
catch(InvalidCastException ice)
{
//Do nothing. Browser.HWND could not execute for this item.
}
}
この前に何が起こりますか? IEを自分で起動していますか?それは始める時間が必要です。 –
'新しいShellWindowsClass()は、使用できる状態になるまでブロックされると思います。 –
私は自分自身にIEを張っていて、始めるには十分な時間があります。私は明日もう一度試してみるが、 "新しいShellWindowsClass()"の後に睡眠が来なければならないようだ。私はVSデバッガの効果はあまり良くありませんが、そこでコードを実行し、ブレークポイントで待っているときに、私がThread.Sleepを持っていなければ同じ問題が発生します。デバッガが何か他のものを導入しているかもしれませんが、今では何らかの理由でスレッドをスリープさせることは、新しいShellWindowsClass()を終了させる唯一の方法です。 –