C# 如何用C编写多线程应用程序?
我有一个C Windows应用程序,它可以执行许多任务。其中一些任务非常浪费时间。当我运行这些类型的任务时,应用程序的其他部分将被禁用 如何编写应用程序来避免这种情况?使用线程是一个好的解决方案吗?安全吗?试试使用 创建工具箱中可用的BackGroundWorker 创建DoWork事件您可以在BGW属性的事件选项卡中访问此事件C# 如何用C编写多线程应用程序?,c#,.net,multithreading,C#,.net,Multithreading,我有一个C Windows应用程序,它可以执行许多任务。其中一些任务非常浪费时间。当我运行这些类型的任务时,应用程序的其他部分将被禁用 如何编写应用程序来避免这种情况?使用线程是一个好的解决方案吗?安全吗?试试使用 创建工具箱中可用的BackGroundWorker 创建DoWork事件您可以在BGW属性的事件选项卡中访问此事件 private void BGWorker_DoWork(object sender, DoWorkEventArgs e) { DoT
private void BGWorker_DoWork(object sender, DoWorkEventArgs e)
{
DoTimeConsumingTask();
}
并将其命名为:
BGWorker.RunWorkerAsync();
您可以将变量传递给DoWork处理程序,该处理程序可以通过
e.Argument //(It comes as an Object, you can use int.Parse, .ToString() or whatever
您可以尝试的第一件事是使用 范例 您可能有这样一种运行时间很长的方法:void HeavyLifting 因此,要委派一些工作,请使用后台工作人员 在本例中,事件方法someHeavyWork只调用HeavyLifting 要启动worker,只需执行以下操作: worker.RunWorkAsync 提示:更新GUI线程
请记住,如果要通过该线程更改GUI线程中的内容,则需要为此使用invoke/delegate。您可以在MSDN上了解这一点:您已经得到了后台工作人员的建议。另一种方法是自己开始一个新线程
void main()
{
Thread worker = new Thread(new ThreadStart(DoStuff));
worker.Start();
}
private void DoStuff()
{
// long running work in here
}
如果要向DoStuff方法中插入参数,也可以使用。当前,可以使用来对非Windows窗体应用程序中的后台任务进行排队。在.NET4.0中,并行编程有许多新特性,如并行LINQ等。。。。你可能会感兴趣 干杯
Matthias非常有助于理解.NET中的线程,有很多示例;由Joseph Albahari共享。如前所述,使用BackgroundWorker并查看和。或者如果您使用.net 4.0,您可以使用任务框架,这很好。但是要小心不要从另一个线程写入UI控件。我支持这一点-Albahari的论文是一个很好的起点。
void main()
{
Thread worker = new Thread(new ThreadStart(DoStuff));
worker.Start();
}
private void DoStuff()
{
// long running work in here
}