如果我点击两次启动后台程序的按钮,我会收到此错误。ThisBackgroundWorkeriscurrentlybusyandcannotrunmultipletasksconcurrently我怎样才能避免这种情况? 最佳答案 很简单:不要启动BackgroundWorker两次。您可以使用IsBusy属性检查它是否已经在运行,因此只需更改此代码:worker.RunWorkerAsync();为此:if(!worker.IsBusy)worker.RunWorkerAsync();elseMessageBox.Show("Can
只是想要一些关于多线程任务的“最佳实践”的建议。例如,我们有一个C#应用程序,它在启动时从我们数据库中的各种“类型”表中读取数据,并将信息存储在我们传递给应用程序的集合中。这可以防止我们在每次需要此信息时访问数据库。此时应用程序正在从10个表中同步读取数据。我真的很想让应用程序从不同线程中的每个表读取所有并行运行。应用程序将等待所有线程完成,然后再继续启动应用程序。我已经研究了BackGroundWorker,但只是想获得一些关于完成上述任务的建议。该方法是否符合逻辑以加快我们应用程序的启动时间我们如何才能最好地处理所有线程,请记住每个线程的工作彼此独立,我们只需要等待所有线程完成后再
只是想要一些关于多线程任务的“最佳实践”的建议。例如,我们有一个C#应用程序,它在启动时从我们数据库中的各种“类型”表中读取数据,并将信息存储在我们传递给应用程序的集合中。这可以防止我们在每次需要此信息时访问数据库。此时应用程序正在从10个表中同步读取数据。我真的很想让应用程序从不同线程中的每个表读取所有并行运行。应用程序将等待所有线程完成,然后再继续启动应用程序。我已经研究了BackGroundWorker,但只是想获得一些关于完成上述任务的建议。该方法是否符合逻辑以加快我们应用程序的启动时间我们如何才能最好地处理所有线程,请记住每个线程的工作彼此独立,我们只需要等待所有线程完成后再
我正在编写一个重复运行一系列数字IO操作的Windows应用程序。这一系列操作在用户单击“开始”按钮时开始,由后台工作人员在backgroundWorker1_DoWork()中完成。但是,有时我会收到“此后台工作人员当前正忙......”错误消息。我正在考虑在代码中实现以下内容,方法是在开始另一个操作序列之前使用while循环“杀死”后台工作人员:if(backgroundWorker1.IsBusy==true){backgroundWorker1.CancelAsync();while(backgroundWorker1.IsBusy==true){backgroundWorke
我正在编写一个重复运行一系列数字IO操作的Windows应用程序。这一系列操作在用户单击“开始”按钮时开始,由后台工作人员在backgroundWorker1_DoWork()中完成。但是,有时我会收到“此后台工作人员当前正忙......”错误消息。我正在考虑在代码中实现以下内容,方法是在开始另一个操作序列之前使用while循环“杀死”后台工作人员:if(backgroundWorker1.IsBusy==true){backgroundWorker1.CancelAsync();while(backgroundWorker1.IsBusy==true){backgroundWorke
我知道它有3个方法。在我的程序中,我有一个发送消息的方法。通常很晚,程序有时根本不响应按钮按下而发送消息。有时比我预期的晚5秒,程序就会卡住。我想使用一个BackgroundWorker来按预期发送消息,并让程序始终正常运行。我有在按钮处理程序中发送消息的代码。现在我把这个等效代码放在哪里?我希望所有这些仍然可以通过按下按钮来处理。这是合适的处理程序吗?backgroundWorker1.RunWorkerAsync();并在:privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){}我要把我的代码放在按钮处
我知道它有3个方法。在我的程序中,我有一个发送消息的方法。通常很晚,程序有时根本不响应按钮按下而发送消息。有时比我预期的晚5秒,程序就会卡住。我想使用一个BackgroundWorker来按预期发送消息,并让程序始终正常运行。我有在按钮处理程序中发送消息的代码。现在我把这个等效代码放在哪里?我希望所有这些仍然可以通过按下按钮来处理。这是合适的处理程序吗?backgroundWorker1.RunWorkerAsync();并在:privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){}我要把我的代码放在按钮处
我的WinForms应用使用了多个BackgroundWorker对象从数据库中检索信息。我正在使用BackgroundWorker,因为它允许UI在长时间运行的数据库查询期间保持畅通无阻,并且它为我简化了线程模型。我在其中一些后台线程中偶尔会遇到DatabaseExceptions,并且我在调试时在工作线程中至少看到了其中一个异常。我相当有信心这些异常是超时,我认为不时发生这种情况是合理的。我的问题是当这些后台工作线程之一发生未处理的异常时会发生什么。我不认为我可以在另一个线程中捕获异常,但我可以期望我的WorkerCompleted方法被执行吗?我可以查询BackgroundWor
我的WinForms应用使用了多个BackgroundWorker对象从数据库中检索信息。我正在使用BackgroundWorker,因为它允许UI在长时间运行的数据库查询期间保持畅通无阻,并且它为我简化了线程模型。我在其中一些后台线程中偶尔会遇到DatabaseExceptions,并且我在调试时在工作线程中至少看到了其中一个异常。我相当有信心这些异常是超时,我认为不时发生这种情况是合理的。我的问题是当这些后台工作线程之一发生未处理的异常时会发生什么。我不认为我可以在另一个线程中捕获异常,但我可以期望我的WorkerCompleted方法被执行吗?我可以查询BackgroundWor
考虑一个为您做事的对象的假设方法:publicclassDoesStuff{BackgroundWorker_worker=newBackgroundWorker();...publicvoidCancelDoingStuff(){_worker.CancelAsync();//todo:FigureoutawaytowaitforBackgroundWorkertobecancelled.}}如何等待BackgroundWorker完成?过去人们曾尝试过:while(_worker.IsBusy){Sleep(100);}但是thisdeadlocks,因为IsBusy直到RunWo