Tag: backgroundworker

背景工人实施

这是我的后台工作DoWorfunction,是考虑到GUI操作完成的实现好吗? private void backgroundWorker1_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { try { string connectionString = “Data Source=LPMSW09000012JD\\SQLEXPRESS;Initial Catalog=Pharmacies;Integrated Security=True”; SqlConnection con = new SqlConnection(connectionString); con.Open(); string query = “SELECT * FROM dbo.Liguanea_Lane2”; SqlCommand cmd = new SqlCommand(query, con); SqlDataReader dr = cmd.ExecuteReader(); while (dr.Read()) { string scode = dr.GetString(dr.GetOrdinal(“code”)); comboBox2.Invoke((MethodInvoker)delegate { comboBox2.Items.Add(scode); }); } } catch (Exception […]

线程不活动时释放资源

我正在使用BackgroundWorker,在其中我使用foreach循环,在其中创建新线程,等待它完成,然后报告进度并继续foreach循环。 这就是我所说的: private void DoWork(object sender, DoWorkEventArgs e) { var fileCounter = Convert.ToDecimal(fileNames.Count()); decimal i = 0; foreach (var file in fileNames) { i++; var generator = new Generator(assembly); var thread = new Thread(new ThreadStart( delegate() { generator.Generate(file); })); thread.SetApartmentState(ApartmentState.STA); thread.Start(); while (thread.IsAlive); // critical point int progress = Convert.ToInt32(Math.Round(i / fileCounter * 100)); backgroundWorker.ReportProgress(progress); […]

后台工人类和使用来自c#中不同类的进度事件传递消息

所以我有一个类在新的后台工作程序中启动一个新类,后台工作程序使用progresschanged部分传回状态消息。 当我尝试并通过键入使用它 classname.Dataworker.reportprogress(5) 从一个单独的类我得到一个错误,我在定义之前使用一个对象。 我发现的例子都使用了单个类和不同的函数。 这可能是一个愚蠢的容易错误,但我只是看不到它,谢谢你能给予的任何帮助! 我的代码概述如下: //form class public static BackgroundWorker bw = new BackgroundWorker(); onbuttonclick { installer install = new installer(); bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = true; bw.DoWork += class2.aFunction; bw.ProgressChanged += new ProgressChangedEventHandler(mainForm_InstallerEvent); bw.RunWorkerAsync(); } private void mainForm_InstallerEvent(object sender, ProgressChangedEventArgs e) { lbl.Text = e.UserState.ToString(); } //// class2后台工作者类 aFunction { InstallerForm.bw.ReportProgress(5); //errors […]

C#停止BackgroundWorker

我对backgroundworker有疑问。 我在backgroundworker中有无限循环。 我怎么能阻止它?

停止背景工作者

我的应用程序使用后台工作程序在循环内做一些工作。 我有它,以便在每次循环迭代时,它检查取消挂起是否为真,如果是,则打破循环。 好的,我的应用程序一旦完成循环的当前迭代就会停止处理。 问题是我认为后台工作程序仍在运行 – 如果我再次单击按钮开始处理,我会收到一条错误消息,指出后台工作人员正忙。 我打算处理工作人员,但是当表单运行时它就会被创建,所以如果我处理它,那就不能再开始工作了。 我真正想做的是告诉后台工作人员它是完整的,如果我点击“停止处理”按钮,那么当我点击开始按钮时它就可以再次开始处理了! 我打算试试这个: private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { while (!backgroundWorker1.CancellationPending) { // Start processing in a background thread so the GUI remains responsive, // pass in the name of the text file produced by // PFDR FilenameLogic(txtLetterType.Text); } }

使用BackgroundWorker完成另一个WPF / C#之后的两个方法

在我的程序中,我有两种方法需要一段时间才能完成,每种方法大约需要几分钟。 在执行这些方法时,我在一个单独的窗口中显示一个进度条,显示每个方法的进度。 我的两个方法是在一个静态的Utility类中。 它们看起来如下: public static class Utility { public static bool TimeConsumingMethodOne(object sender) { for (int i = 1; i <= 100; i++) { Thread.Sleep(100); (sender as BackgroundWorker).ReportProgress(i); } return true; } public static bool TimeConsumingMethodTwo(object sender) { for (int i = 1; i <= 100; i++) { Thread.Sleep(50); (sender as BackgroundWorker).ReportProgress(i); } return […]

停止线程由backgroundworker启动

我有一个使用背景工作者的窗体。 backgroundworker实例化一个对象,然后在该对象中执行一个方法。 我的问题是,当我使用backgroundworker.CancelAsync时,在远程对象上运行的方法不会停止。 在下面的示例中,单击按钮取消后,dowork方法继续执行。 仅供参考,dowork通过电子表格循环并根据电子表格中的行进行一些数据操作。 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { myObject newObject = new myObject(); newObject.dowork(); if (backgroundWorker1.CancellationPending) { e.Cancel = true; backgroundWorker1.ReportProgress(0); return; } } private void btnCancel_Click(object sender, EventArgs e) { if (backgroundWorker1.IsBusy) backgroundWorker1.CancelAsync(); } 思考? 谢谢

背景工人的文本框文本?

我一直在试图弄清楚如何从后台工作者中获取文本框的文本或其他属性。 有人知道怎么做这个吗? 我无法将其作为一个参数传递,因为它需要是实时的。 谢谢您的帮助!

尝试将float转换为Int32时,Convert.ToInt32(float)失败

抛出没有exception,函数只是在这个语句中停止: int productQuantity = Convert.ToInt32(“1.00”); 并返回。 将此浮点数转换为Int32我做错了什么? 注意:我在BackgroundWorkerThread运行。

如何使用BackgroundWorker事件RunWorkerCompleted

总之,我已经知道BackgroundWorker在WinForm中处理multithreading案例的基本用法。 代码结构如下所示。 在应用程序的主线程中。 刚刚启动BackgroundWork。 if (backgroundWorker1.IsBusy != true) { // Start the asynchronous operation. backgroundWorker1.RunWorkerAsync(); } 然后它会触发DoWork事件。 所以我们可以在那里做点什么。 private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundWorker; …… // report progress. worker.ReportProgress(iProgress); …. } 然后我们只需要处理ProgressChanged事件以显示BackgroundWorker进度。 private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e) { //show progress. resultLabel.Text = (e.ProgressPercentage.ToString() + “%”); } DoWork完成或发生exception后。 […]