Kev*_*hts 3 c# forms while-loop
我有一段代码检查某个应用程序是否正在运行
while (Process.GetProcessesByName("notepad").Length == 0)
{
System.Threading.Thread.Sleep(1000);
}
Run Code Online (Sandbox Code Playgroud)
它将检查用户是否正在运行记事本,但它会使表单冻结并在几秒钟后停止响应.我不知道是否有更好的解决方案来解决这个问题.
在这种情况下,您实际上希望在与主UI线程分开的线程上完成一些工作.
理想的情况是利用该BackgroundWorker对象,该对象将很乐意在另一个线程上运行而不会阻止您的UI.
我不会给你一个完整的解释,因为那里有很多教程,但你会想做一些像:
var worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
Run Code Online (Sandbox Code Playgroud)
这会创建BackgroundWorker并将其DoWork事件绑定到workerDoWork我们即将创建的处理程序:
void worker_DoWork(object sender, DoWorkEventArgs e)
{
//Glorious time-consuming code that no longer blocks!
while (Process.GetProcessesByName("notepad").Length == 0)
{
System.Threading.Thread.Sleep(1000);
}
}
Run Code Online (Sandbox Code Playgroud)
现在启动工人:
worker.RunWorkerAsync();
Run Code Online (Sandbox Code Playgroud)
查看本教程:http://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners