我有一个C#应用程序,我通过Windows API与另一个窗口进行交互:(例如FindWindow()
,FindWindowEx()
).
在我的应用程序的一个特定部分,我必须等待另一个应用程序的窗口加载,然后单击出现的按钮(有时需要三秒钟才能显示).
目前,我这样做:
IntPtr foohWnd = IntPtr.Zero; while(foohWnd == IntPtr.Zero) foohWnd = FindWindow(null, "Foo");
正如您所看到的,这只是一遍又一遍地检查窗口而不关心资源或类似的东西.(别担心,在我的实际代码中,它会在一点之后"超时"以防止无限循环).
但是,我发现这样做的另一种方法是使用Thread.Sleep()
:
Thread.Sleep(3000); foohWnd = FindWindow(null, "Foo");
这两个中哪一个是更好的做法?有没有更好的方式我在这里无视?
尝试:
await Task.Delay(TimeSpan.FromSeconds(30));
它是异步方式,线程不会被阻塞.