backgroundworker

时间:2026-04-12 07:36:53编辑:莆田seo君

c#窗体 如何在backgroundworker的DoWork中结束这个后台?

  你好,BackgroundWorker的DoWork事件的委托签名如下:  private void DoWork(object sender, DoWorkeventArgs e)  其中参数e包含了大量信息,同时能够接收使用e.Cancel=true令worker取消任务。  需要在DoWork中取消,应使用e.Cancel=true;return;  需要在外部取消,应:在初始化时令backgroundWorker1.WorkerReportsProgress = true;在外部控制的地方(如按钮事件)backgroundWorker1.CancelAsync();CancelAsync会更改worker的CancellationPending标志,所以在DoWork中应有类似下面的片段判断并退出。 if(backgroundWorker1.CancellationPending) { e.Cancel=true; return;}  最后,在DoWork退出后,如需在外部得知是何种原因导致结束(取消或完成),请在worker的RunWorkerCompleted事件中检查参数e.Cancel属性。

如何停止backgroundwork

主要做法有以下两种:
1. 多线程操作,对线程进行定时,如果超时则停止。这个机制微软给出了BackgroundWorker,但是不够灵活不建议使用。优点是足够灵活,代码比较优雅。

private void DoQuery()
{
//Query work
}

private void start()
{
Thread th = new Thread(new ThreadStart(this.DoQuery));
th.Start();
DateTime dt1 = DateTime.Now;
While(th.ThreadState != ThreadState.Stopped)
{
if((DateTime.Now-dt1).Seconds>5)
{
try
{
th.Abort();
}
catch
{
}
break;
}
Application.DoEvent();
}

}

2. 使用数据库查询的超时,不过不是楼上说道的ConnectionTimeout而是Query的CommandTimeout,可以在SqlCommand中设置。建议使用这个(不过一定不要忘记捕捉异常)!
如果是SQL Server的话:

SqlCommand comm = new comm(sql,con);
comm.CommandTimeout = 3;
try
{
comm.ExecuteNonQuery():
}
catch
{
Console.WriteLine("TimeOut");
}
}

Ps:如果是linq的话,在DataContext中有CommandTimeout属性,设置这个就可以控制SubmitChanges的超时时间。其他的关于异常捕捉的做法和上面的一样。


c# 窗体backgroundworker

backgroundworker 是一个后面线程。当然也是可以自己声明个线程来处理。不管理你是使用backgroundworker 或者线程都要正开启执行才能正常使用。你用 backgroundWorker1时如下: backgroundWorker1.RunWorkerAsync();//开始执行后台操作。这样你的backgroundworker线程才能正常使用 public Form1() { InitializeComponent(); backgroundWorker1.RunWorkerAsync(); } flag==1; private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { while (flag_read==1) { } }


怎么根据条件停止BackgroundWorker线程,再根据条件再打开线程

怎么根据条件停止BackgroundWorker线程,再根据条件再打开线程
包管理器还原自动下载与通配符相匹配的“最新版本”。版本号的空引号对表示“使用最新可用项”。我们创建的项目可以针对一个或者多个
Framework(比如我们希望创建的可以同时在.NET Framework和.NET
Core上运行),支持的Framework定义在frameworks节点下。如果添加了多个Framework,并不是说最终生成的应用可以同时在这

些Framework中运行,而是说源文件在编译的时候会针对这些Framework生成对应的程序集。对于传统的.NET项目来说,如果我们需要调用某
个API,需要添加所在程序集的引用。对于.NET
Core来说,所有使用到的程序集都被打包成一个NuGet包,所以针对程序集的直接依赖转变成针对某个NuGet包的依赖。针对NuGet的依赖主要有
两种类型,一种是针对所有Framework的,它们会直接定义在dependencies节点下,另一种则是针对某个具体Framework的,
定义为当前Framework节点下的dependencies子节点。对于独立应用,运行时部分指定将支持的
OS,因此可指定要绑定到应用程序的运行时库。


上一篇:河南农大贴吧

下一篇:没有了