Windows 应用程序中的等待窗口
我基本上需要向用户显示一个等待窗口。 为此,我在应用程序中放置了两个单独的窗口窗体。 第一个表单是带有按钮的主表单。 第二个是空的,只有标签文本。 单击 Form1 中的按钮后,我执行以下操作
Form2 f = new Form2();
f.Show();
Thread.Sleep(2000);
f.Close();
我的想法是向用户显示等待窗口 2 秒。 但是当我这样做时,Form 2 没有完全加载,因为其中的标签是空白的。 请让我知道您对此的意见。
I basically need to show a wait window to the user. For this i have put two seperate window forms in the application. the first form is the main form with a button. The second one is a empty one with just a label text. On click of the button in Form1 i do the below
Form2 f = new Form2();
f.Show();
Thread.Sleep(2000);
f.Close();
My idea here is to show the wait window to the user for 2 second. But when i do this the Form 2 is not completely loaded because of which the label in it is blank. Please let me know your inputs on this.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
这是我使用的等待箱类。 下面是如何使用它:
这是 WaitingBox 的代码:
Here is a Waiting Box class I use. Here is how you use it:
Here is the code for WaitingBox:
那是因为您可能在同一个线程(UI 线程)中执行一些冗长的操作。 您应该在新线程中执行代码(请参阅 Thread 类),或者至少从冗长的操作中定期调用 Application.DoEvents 来更新 UI。
That's because you probably do some lengthy operation in the same thread (UI thread). You should execute your code in a new thread (see Thread class) or at least call Application.DoEvents periodically from inside your lengthy operation to update the UI.
当您使用 Thread.Sleep 时,您将禁用 Windows 消息循环并阻止窗口自行绘制。
您可以强制重新绘制:
或者更好的是使用带有回调的计时器。
为了防止用户在原始窗口中单击,您可以将新表单作为对话框打开:
When yo use Thread.Sleep you will disable the windows message loop and prevent the window from painting itself.
You could force a repaint:
Or better yet use a timer with a callback.
To prevent users from clicking in the original window you can open the new form as a dialog:
你基本上阻塞了 UI 线程。
我建议您让 Form2 构造函数(或者可能是 Load 事件处理程序)启动一个计时器,该计时器将在两秒后触发。 当计时器触发时,关闭窗体。 在那两秒钟内,UI 线程将空闲,因此所有内容都将正确显示,并且用户将能够移动窗口等。
You're basically blocking the UI thread.
I suggest that instead, you make your Form2 constructor (or possibly Load event handler) start a timer which will fire two seconds later. When the timer fires, close the form. During those two seconds, the UI thread will be free, so everything will display properly and the user will be able to move the window etc.
我认为你应该使用
Then control is returned when f is close 。
通过使用睡眠,您将阻止 UI 线程更新 2 秒。 (线程处于休眠状态)。
I think you should just use
Then control is returned when f is closed.
By using the sleep, you are blocking the UI thread from updating for 2 seconds. (The thread is asleep).
您可以(对于 UI 线程始终应该)使用 Thread.Current.Join(2000 ) 而不是 Thread.Sleep(2000)。
You can (an always should for UI threads) use Thread.Current.Join(2000) instead of Thread.Sleep(2000).