2

MainWindowHandle に関するいくつかのスレッドを読みましたが、問題の解決策を見つけることができませんでした。GUI アプリケーションを開始していて、プロセス オブジェクトを介して MainWindowHandle を取得したいのですが、そうしない場合、ハンドル値は常にゼロです。 GUIがロードされるまでthread.sleep()で待ちます。私も WaitForInputIdle を使用しようとしましたが、まったく役に立ちませんでした。

process.Start();

process.WaitForInputIdle(1000);
while (process.MainWindowHandle == IntPtr.Zero)
{
     Thread.Sleep(100);
}
// do something with the handle

私がwaitforinputidleを通常のthread.sleepに置き換えている場合、彼はしばらく離れることはありません。彼はハンドルを正しく取得します。

簡単に言えば、ハンドルを取得した場合にのみコードを続行したい! =ゼロですが、これを静的に待ちたくありません

4

1 に答える 1

8

MainWindowHandle に格納された値はキャッシュされます。ループ内に process.Refresh() を追加して、その値を無効にします。

while (process.MainWindowHandle == IntPtr.Zero)
{
    Thread.Sleep(100);
    process.Refresh();
}
于 2012-04-11T08:41:23.080 に答える