当前位置:  开发笔记 > 编程语言 > 正文

Thread.Sleep()或while()?

如何解决《Thread.Sleep()或while()?》经验,为你挑选了1个好方法。

我有一个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");

这两个中哪一个是更好的做法?有没有更好的方式我在这里无视?



1> 小智..:

尝试:

await Task.Delay(TimeSpan.FromSeconds(30));

它是异步方式,线程不会被阻塞.


正确回答错误的解决方案.OP确实需要使用[WinEvents](https://msdn.microsoft.com/en-us/library/windows/desktop/dd373889.aspx),因为这是等待创建窗口的方式.挂起线程正在解决因选择错误解决方案而导致的问题.
推荐阅读
U友50081205_653
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有