C# "Thread.Sleep" 弄乱我的程序(窗体不显示)
C# "Thread.Sleep" Messing My Program (Form Doesn't Show Up)
我在我的程序中添加了一个循环只是为了检查一些东西...(用于验证)
for (int i = 1; i < total; i++){
for (int row = 0; row < 4; row++){
for (int col = 0; col < 4; col++){
pixel = block[i][row][col];
label1.Text = pixel.R.ToString("X");
System.Threading.Thread.Sleep(100);}}}
添加此循环程序后,程序运行正常,但表单未显示。我开始调试,我看到它在这一行中停止了。不要再往前走了。
Application.Run(new Form1());
节目基本开始。所以我隔离了 System.Threading.Thread.Sleep(100);}}}
部分它现在正在工作。为什么此代码会导致问题。我用了
using System.Threading.Tasks;
。
任何想法或者我可以使用其他延迟功能... © 等待您的帮助。谢谢..
您永远不应该阻塞 UI 线程(通过休眠或做一些繁重的工作),因为线程只能处理 UI 事件(点击、重新渲染、调整大小) ) 或 运行 您的代码,不能同时使用。如果您必须从事件处理程序执行一些长 运行ning 代码,您可以启动一个新线程来完成工作或 运行 异步代码。
对你来说,像这样的东西应该工作得很好:
public async void Form1_Load(object sender, EventArgs e) {
for (int i = 1; i < total; i++){
for (int row = 0; row < 4; row++){
for (int col = 0; col < 4; col++){
pixel = block[i][row][col];
label1.Text = pixel.R.ToString("X");
await Task.Delay();
}
}
}
}
Sleep
在线程等待时阻塞线程,await Task.Delay();
不会。它实际上 returns 并让线程继续执行它之前正在做的任何事情,并且 在完成等待时通知 线程,以便线程稍后可以返回您的函数并继续 运行宁你的代码。 (这是 C# 中 async 和 await 工作方式的简化)
我在我的程序中添加了一个循环只是为了检查一些东西...(用于验证)
for (int i = 1; i < total; i++){
for (int row = 0; row < 4; row++){
for (int col = 0; col < 4; col++){
pixel = block[i][row][col];
label1.Text = pixel.R.ToString("X");
System.Threading.Thread.Sleep(100);}}}
添加此循环程序后,程序运行正常,但表单未显示。我开始调试,我看到它在这一行中停止了。不要再往前走了。
Application.Run(new Form1());
节目基本开始。所以我隔离了 System.Threading.Thread.Sleep(100);}}}
部分它现在正在工作。为什么此代码会导致问题。我用了
using System.Threading.Tasks;
。
任何想法或者我可以使用其他延迟功能... © 等待您的帮助。谢谢..
您永远不应该阻塞 UI 线程(通过休眠或做一些繁重的工作),因为线程只能处理 UI 事件(点击、重新渲染、调整大小) ) 或 运行 您的代码,不能同时使用。如果您必须从事件处理程序执行一些长 运行ning 代码,您可以启动一个新线程来完成工作或 运行 异步代码。
对你来说,像这样的东西应该工作得很好:
public async void Form1_Load(object sender, EventArgs e) {
for (int i = 1; i < total; i++){
for (int row = 0; row < 4; row++){
for (int col = 0; col < 4; col++){
pixel = block[i][row][col];
label1.Text = pixel.R.ToString("X");
await Task.Delay();
}
}
}
}
Sleep
在线程等待时阻塞线程,await Task.Delay();
不会。它实际上 returns 并让线程继续执行它之前正在做的任何事情,并且 在完成等待时通知 线程,以便线程稍后可以返回您的函数并继续 运行宁你的代码。 (这是 C# 中 async 和 await 工作方式的简化)