Tag: backgroundworker

VB.NET progressbar backgroundworker

当我的应用程序启动,并且刚刚升级时,我正在执行本地数据库更新(sqlite)。 这是这样的:用户启动我的应用程序,然后我开始升级过程。 在此升级过程中,我正在显示一个具有连续进度条的表单。 此表单在升级过程完成后closures,然后用户可以开始使用我的应用程序。 但是由于升级过程非常密集,进度条不会生成animation。 在我以前的VB6版本中,我使用了一个ActiveX-Exe,它有一个窗体并显示一个进度条。 这是我的“背景工作者”。 我不确定是否可以在VB.NET中使用相同的方法。 我只看到了后台工作人员的例子,但是我还没有看到任何进度条本身就是后台工作的例子。 数据库升级需要被阻止,在数据库升级完成之前用户可能不能使用我的应用程序。 这意味着只有进度条应该“失控”,而不是升级。 非常感谢你!

我怎样才能使后台工作线程设置为单线程公寓?

我正在创build一个自动化testing运行应用程序 在这部分应用程序中,我正在使用一个轮询服务器。 它通过不断轮询Web服务器来确定何时应该运行一个新的自动化testing(对于我们的GUI应用程序的夜间自动运行)。 当轮询服务器看到一个请求时,它下载所有需要的信息,然后在后台工作者中执行testing运行。 问题是部分testing运行在后台工作线程中发生OLE,COM和其他调用(例如, Clipboard.Clear() )。 发生这些调用之一时,会发生以下exception: 当前的线程必须设置为单线程单元(STA)模式才能进行OLE调用。 确保你的Main函数有标记的STAThreadAttribute。 我怎样才能标记一个后台工作线程作为单线程的公寓? 我的Program.cs中的Main调用显然已经有了这个属性。

在BackgroundWorker中未处理的exception

我有一个小的WinForms应用程序,利用BackgroundWorker对象执行长时间运行的操作。 后台操作会抛出偶尔的exception,通常是有人打开正在重新创build的文件。 无论代码是从IDE运行,还是不会popup错误对话框,通知用户发生了未处理的exception。 使用Releaseconfiguration编译代码也不会改变这一点。 根据MSDN : 如果该操作引发了代码无法处理的exception,则BackgroundWorker捕获该exception并将其传递到RunWorkerCompleted事件处理程序中,并作为System.ComponentModel .. ::。RunWorkerCompletedEventArgs的Error属性公开。 如果您正在Visual Studiodebugging器下运行,则debugging器将在引发未处理的exception的DoWork事件处理程序中断点。 我希望偶尔抛出这些exception,并希望在RunWorkerCompleted事件而不是DoWork中处理这些exception。 我的代码工作正常,错误在RunWorkerCompleted事件中正确处理,但我不能为我的生活弄清楚如何停止抱怨发生“未处理的exception”的.NET错误对话框。 BackgroundWorker是不是应该自动捕获这个错误? 这不是MSDN文档的内容吗? 我需要做什么来通知.NET这个错误正在被处理,同时仍然允许exception占用RunWorkerCompletedEventArgs的Error属性?

asynchronous/等待与BackgroundWorker

在过去的几天里,我testing了.net 4.5和c#5的新特性。 我喜欢它的新asynchronous/等待function。 早些时候,我曾经使用BackgroundWorker在响应式UI的背景下处理更长的stream程。 我的问题是:有了这些很好的新function,什么时候应该使用async / await和BackgroundWorker ? 哪两个都是常见的情况?

BackgroundWorker RunWorkerCompleted事件

我的C#应用​​程序有几个后台工作人员。 有时候一个后台工作人员会开火。 当第一个后台工作器完成并且RunWorkerCompleted事件被触发时,该事件将在哪个线程触发,UI或调用RunWorkerAsync的第一个后台工作器? 我正在使用Microsoft Visual C#2008速成版。 任何想法或build议,你可能会感激。 谢谢。

如何用backgroundworker更新GUI?

我花了整整一天的时间试图让我的应用程序使用线程,但没有运气。 我已经阅读了很多关于它的文档,但是我仍然有很多错误,所以我希望你能帮助我。 我有一个很耗时的方法调用数据库并更新GUI。 这一直发生(或大约每30秒)。 public class UpdateController { private UserController _userController; public UpdateController(LoginController loginController, UserController userController) { _userController = userController; loginController.LoginEvent += Update; } public void Update() { BackgroundWorker backgroundWorker = new BackgroundWorker(); while(true) { backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork); backgroundWorker.RunWorkerAsync(); } } public void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { _userController.UpdateUsersOnMap(); } } 使用这种方法,我得到一个exception,因为背景工作不是和STA线程(但从我能理解这是我应该使用)。 我已经尝试了一个STA线程,并给了其他错误。 我认为这个问题是因为我尝试在进行数据库调用时更新GUI(在后台线程中)。 […]

如何使用ProgressBar更新正确实现BackgroundWorker?

– 更新 – 14/10也问了这个问题 给出一些清晰的想法,并考虑到这里的评论和这篇文章 我现在真正想要做的就是调用一个带有进度条的新窗体,让它运行和设置animation,而我的后台线程将我的长进程运行到数据库,然后调用一个closures窗体事件 后台工作人员在这里设置 public partial class MainWindow : Window { //Declare background workers BackgroundWorker bw = new BackgroundWorker(); BackgroundWorker bwLoadCSV = new BackgroundWorker(); BackgroundWorker bwProgressBar = new BackgroundWorker(); 然后代表在这里添加 public MainWindow() { bwLoadCSV.WorkerReportsProgress = true; bwLoadCSV.WorkerSupportsCancellation = true; bwLoadCSV.DoWork += new DoWorkEventHandler(bwLoadCSV_DoWork); bwLoadCSV.ProgressChanged += new ProgressChangedEventHandler(bwLoadCSV_ProgressChanged); bwLoadCSV.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwLoadCSV_RunWorkerCompleted); 这个调用是从主窗口类来的 […]

BackgroundWorker vs背景线程

我有一个关于在Windows窗体应用程序中使用后台线程实现的select的风格问题。 目前我有一个无限(while(true))循环窗体上的BackgroundWorker 。 在这个循环中,我使用WaitHandle.WaitAny来保持线程在打盹,直到感兴趣的事情发生。 我等待的事件句柄之一是一个“ StopThread ”事件,以便我可以跳出循环。 这个事件是从我重写的Form.Dispose()发出的。 我在某处看到, BackgroundWorker真的是用于那些你不希望绑定UI的操作,并且有一个有限的结束 – 比如下载一个文件,或者处理一系列的项目。 在这种情况下,“结束”是未知的,只有当窗户closures时。 因此,为了这个目的,使用背景线程而不是BackgroundWorker会更合适吗?

如何使用BackgroundWorker?

我知道它有3种方法。 在我的程序中,我有一个方法来发送消息。 这往往是迟到,程序有时根本没有发送消息响应button按下。 有时候我只想到5秒钟,程序就冻结了。 我想使用BackgroundWorker按预期发送消息,并允许程序在任何时候都能正常运行。 我有在button处理程序中发送消息的代码。 现在我把这个等效的代码放在哪里? 我希望所有这些仍然可以通过button来处理。 这是合适的处理程序? backgroundWorker1.RunWorkerAsync(); 和: private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) {} 我要把我的代码在button处理程序? 而这之前: carga.progressBar1.Minimum = 0; carga.progressBar1.Maximum = 100; Carga是ProgressBar的另一种forms。 在这种情况下如何使用BackgroundWorker?

调用线程不能访问这个对象,因为不同的线程拥有它

我的代码如下 public CountryStandards() { InitializeComponent(); try { FillPageControls(); } catch (Exception ex) { MessageBox.Show(ex.Message, "Country Standards", MessageBoxButton.OK, MessageBoxImage.Error); } } /// <summary> /// Fills the page controls. /// </summary> private void FillPageControls() { popUpProgressBar.IsOpen = true; lblProgress.Content = "Loading. Please wait…"; progress.IsIndeterminate = true; worker = new BackgroundWorker(); worker.DoWork += new System.ComponentModel.DoWorkEventHandler(worker_DoWork); worker.ProgressChanged += new […]