我多年来一直在编写ASP.NET Web应用程序,但实际上并没有在大型Windows窗体项目上工作。现在,我需要进行一项工作,因此我正在寻找一些有关理想情况下如何构造大型Windows窗体项目的建议。更具体地说,我想知道如何处理多个线程。假设您有一个过程需要一些时间才能完成-您不想冻结ui窗口并且不响应。因此,该逻辑需要在单独的线程中移动。如果此线程访问UI,则将导致异常。调用似乎可以解决问题,但是编写和阅读起来非常丑陋和繁琐!
那么,实际上,最佳实践是什么?一个线程应该启动哪种类型的线程,以及如何在UI和逻辑之间拆分这些线程?有任何示例代码可以入门吗?
最佳答案
这是使用backgroundworker的一种简短方法
public Form1()
{
InitializeComponent();
BackgroundWorker worker = new BackgroundWorker();
worker.WorkerReportsProgress = true; //set to true to fire the progress-changed event
worker.DoWork += doWork;
worker.ProgressChanged += progressChanged;
}
void progressChanged(object sender, ProgressChangedEventArgs e)
{
int progress = e.ProgressPercentage; //Progress-Value
object userState = e.UserState; //can be used to pass values to the progress-changed-event
}
void doWork(object sender, DoWorkEventArgs e)
{
object argument = e.Argument; //Parameters for the call
bool cancel = e.Cancel; //Boolean-Value for cancel work
object result = e.Result; //Object for a return-value
}
关于c# - Windows窗体中的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10991868/