Tag: 工作者

c#winform后台工作者和进度条

我正在尝试使用BG Worker增加进度条。 我目前正在使用2个BG工作人员,一个用于将数据添加到数据库中,另一个用于进度条。 数据库上传工作正常,但进度条没有。 码: BackgroundWorker bg2 = new BackgroundWorker(); bg2.DoWork +=new DoWorkEventHandler(bg2_DoWork); bg2.RunWorkerAsync(); void bg2_DoWork(object sender, DoWorkEventArgs e) { while (bg1.IsBusy) DrawWellPlate.pbar.Increment(1) } 它引用的bg1是数据库上传线程,而pbar显然是进度条。 谢谢。

后台工作者在自己的class级处理

好吧,我有以下问题,希望你能帮助我: 我想创建一个带后台工作程序的WPF应用程序,用于更新richtextboxes和其他UI元素。 这个后台工作者应该处理一些数据,例如处理文件夹的内容,做一些解析等等。 因为我想在Main类之外移动尽可能多的代码,所以我创建了一个名为MyProcess.cs类,如下所示(事实上,到目前为止,这个类没有多大意义,它将填充更多处理元素,如果这个问题已经解决)。 一般function应该是: MainWindow:将创建一个字符串数组(名为this.folderContent ) MainWindow:后台工作者开始将此数组作为参数 MainWindow:将调用DoWork()方法(我知道,这个方法现在在一个新线程中运行) MyProcess:根据给定的字符串数组生成一个(迄今为止未格式化的)段落 MainWindow:如果后台工作程序完成,则调用RunWorkerCompleted()方法(在UI线程中运行),该方法应通过方法的返回参数更新WPF RichTextBox 最后一步导致带有注释的InvalidOperationsException,“调用线程无法访问此对象,因为另一个线程拥有它”。 我读了一下后台工作者类及其function。 所以我认为它与this.formatedFilenames.Inlines.Add(new Run(…))的Execute()方法中的this.formatedFilenames.Inlines.Add(new Run(…))调用MyProcess 。 如果我用字符串列表或类似的东西替换Paragraph属性(没有额外的new()调用)我可以通过get方法访问此成员而不会出现任何问题。 与我发现的后台工作者相关的所有示例都只返回基本类型或简单类。 MainWindow.xaml.cs public MainWindow() { InitializeComponent(); this.process = new MyProcess(); this.worker = new BackgroundWorker(); this.worker.DoWork += worker_DoWork; this.worker.RunWorkerCompleted += worker_RunWorkerCompleted; } private void worker_DoWork(object sender, DoWorkEventArgs e) { this.process.Execute((string[])e.Argument); e.Result = this.process.Paragraph(); } private void worker_RunWorkerCompleted(object […]

如何等待BackgroundWorker完成然后退出控制台应用程序

我已经编写了一个示例控制台应用程序来使用Stackoverflow中发布的示例之一来测试backgroundworker。 我有一个backgroundworker,它以main方法开头,但是如果我按下回车键,它会在操作过程中结束,因为我在main方法中写了一个console.readkey。 但我希望它等到后台工作者完成工作然后退出应用程序。 这是我的代码。 class Program { private static BackgroundWorker worker = new BackgroundWorker(); private event EventHandler BackgroundWorkFinished; static void Main(string[] args) { worker.DoWork += worker_DoWork; worker.RunWorkerCompleted += worker_RunWorkerCompleted; worker.ProgressChanged += worker_ProgressChanged; worker.WorkerReportsProgress = true; worker.WorkerSupportsCancellation = true; Console.WriteLine(“Starting Application…”); worker.RunWorkerAsync(); Console.ReadKey(); } static void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { Console.WriteLine(e.ProgressPercentage.ToString()); } static void worker_DoWork(object […]

.NET Web服务和BackgroundWorker线程

我正试图在webservice方法中做一些异步的东西。 假设我有以下API调用: http : //www.example.com/api.asmx 并且该方法称为GetProducts() 。 我这个GetProducts方法,我做了一些事情(例如从数据库中获取数据)然后在我返回结果之前,我想做一些异步的东西(例如给我发电子邮件)。 所以这就是我所做的。 [WebMethod(Description = “Bal blah blah.”)] public IList GetProducts() { // Blah blah blah .. // Get data from DB .. hi DB! // var myData = ……. // Moar clbuttic blahs 🙂 (yes, google for clbuttic if you don’t know what that is) // Ok .. […]

BackgroundWorker WPF与Progress Bar的困难

我正在开发一个WPF,C#应用程序,我必须读取一个非常大的CSV文件并写入数据库。 这个过程需要很长时间,所以我想至少显示一个随着接近完成而增长的进度条。 现在,我在顶部有以下代码: private readonly BackgroundWorker worker = new BackgroundWorker(); 然后在循环内我有这个: worker.WorkerReportsProgress = true; worker.ReportProgress((100 * i) / 10000); 我有一个这样的私人子: private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) { prgBar.Value = Math.Min(e.ProgressPercentage, 100); } 但我没有看到进度条更新或发生任何事情,程序仍然挂起。 难道我做错了什么? 更新:在这里尝试了MSDN指南http://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx ,我不知道如何使用该示例。 我当然调整了循环部分。 嘿。 它仍然闲置,没有任何更新。 哎呀,我想做的就是得到一个小的计数器,每次读取和添加一行时都会增加。 更新的代码: private BackgroundWorker bw = new BackgroundWorker(); public Process() { bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = […]

简单的BackgroundWorker不会更新网页上的标签

我在这个有用的post中使用了一段简单的代码 它使用一个按钮和一个标签,标签应报告“10%完成”……“20%完成”……等等。 当我调试时,代码被点击,但我的标签没有在浏览器上更新。 我尝试使用和不使用更新面板,有和没有母版页。 protected void btnStartThread_Click(object sender, EventArgs e) { BackgroundWorker bw = new BackgroundWorker(); // this allows our worker to report progress during work bw.WorkerReportsProgress = true; // what to do in the background thread bw.DoWork += new DoWorkEventHandler(delegate(object o, DoWorkEventArgs args) { BackgroundWorker b = o as BackgroundWorker; // do some simple […]

使用后台工作程序 – 更新ProgressBar以了解递归方法的进度

下面是一个方法,我想发送到后台工作者,但我正在努力如何根据如何创建我的方法来做到这一点。 尽管如此,它不会返回任何正常的内容,但每次调用时都需要一个directoryInfo对象。 private void getSizeForTargetDirectory(DirectoryInfo dtar) { // generate a collection of objects. files comes first and then directories. foreach (Object item in collection ) { if (item == file) { track the size of the files as you encounter. } else if (item == directory) { // found a new directory, recall the method. […]

使用队列创建BackgroundWorker

我需要创建队列并将其与BackgroundWorker一起使用。 所以我可以添加操作,然后在下一步完成时将在后台启动。 我通过谷歌找到了这个代码: public class QueuedBackgroundWorker { public void QueueWorkItem( Queue queue, T inputArgument, Func doWork, Action workerCompleted) { if (queue == null) throw new ArgumentNullException(“queue”); BackgroundWorker bw = new BackgroundWorker(); bw.WorkerReportsProgress = false; bw.WorkerSupportsCancellation = false; bw.DoWork += (sender, args) => { if (doWork != null) { args.Result = doWork(new DoWorkArgument((T)args.Argument)); } }; bw.RunWorkerCompleted […]

在BackGroundWorker中运行方法并显示ProgressBar

我想要的是当一些方法正在做一些任务时UI保持活跃,我想在进度条中显示工作的进度。 我有一个方法,一个BackGroundWorker和一个Progressbar 。 我想在BackGroundWorker开始运行时调用该方法并显示进度。 该方法包含一个循环。 因此,它可以报告进度。 那么,可以做些什么呢? private void Form1_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the ‘dataSet1.TBLMARKET’ table. You can move, or remove it, as needed. myBGWorker.WorkerReportsProgress = true; } private void myBGWorker_DoWork(object sender, DoWorkEventArgs e) { parseFiles(); } private void myBGWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { myProgressBar.Value […]

C#Winform ProgressBar和BackgroundWorker

我有以下问题: 我有一个名为MainForm的表单。 我要在这张表格上进行长时间的操作。 虽然这个长时间的操作正在进行,但我需要在MainForm之上显示另一个名为ProgressForm的操作。 ProgressForm包含一个进度条,需要在长时间操作时更新。 长操作完成后,应自动关闭ProgressForm。 我写了以下代码: using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Threading; namespace ClassLibrary { public class MyClass { public static string LongOperation() { Thread.Sleep(new TimeSpan(0,0,30)); return “HelloWorld”; } } } using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace BackgroungWorker__HelloWorld { public partial […]