Tag: backgroundworker

将参数传递给Backgroundworker

我正在运行ac#代码与后台工作者。 我通过使用foreach循环并在循环内部传递foreach变量作为Backgroundworker的参数来强迫它。 但问题是每当我运行代码时只有单个随机值,很可能gridview中的最后一行作为参数传递。 代码如下 foreach (DataGridViewRow row in dataGridView3.Rows) { BackgroundWorker worker = new BackgroundWorker(); worker.WorkerSupportsCancellation = true; worker.DoWork += delegate { data = dataGridView3.Rows[row.Index].Cells[0].Value.ToString(); rowindex = row.Index; data1 = ros[0].Cells[0].Value.ToString(); }; worker.RunWorkerAync(); }

关于使用backgroundworker / thread时防止GUI变得迟缓的C#问题

我正在尝试构建一个小型应用程序,它登录到服务器并不断收集来自它的数据。 我遇到的问题是即使使用后台工作程序或线程,我的GUI响应也很慢。 当我的应用程序尝试登录到服务器时,我看到“(无响应)”出现在我的登录表单中,但它在几秒钟后登录而没有Windows给出“程序已停止响应…终止应用程序”对话框。 当我点击我的应用程序上的开始按钮时,我注意到GUI变得非常缓慢和无响应。 我想知道如何才能改善程序的响应时间。 以下是使用后台工作程序的Login表单的代码以及从服务器收集数据的我的线程的代码。 我为代码的最后一部分没有正确格式道歉,但是SO是不合作的。 private void btnLogin_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtAccount.Text) || string.IsNullOrEmpty(txtPassword.Text)) { MessageBox.Show(“Must Enter Username and Password”); return; } btnLogin.Enabled = false; account = txtAccount.Text; password = txtPassword.Text; accountType = cmbAccountType.SelectedItem.ToString(); loginBackgroundWorker.RunWorkerAsync(); } private void loginBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { loginSuccess=tradingDesk.Login(account, password, accountType); } private void loginBackgroundWorker_RunWorkerCompleted(object sender, […]

如何在后台实现UDP监听器? (可用于log4net)

我想在后台运行这个UDPListener : // launch this in a background thread private static void UDPListen() { IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0) using( var udpClient = new UdpClient(10000)) { while (true) { var buffer = udpClient.Receive(ref remoteEndPoint); var loggingEvent = System.Text.Encoding.Unicode.GetString(buffer); // … } } } 我可以将它放在Task.Run()并在while()循环中运行吗?

如何在C#中使用后台工作者中的Web浏览器对象

我有下面的代码问题。 有人可以告诉为什么它在BackgroundWorker中不起作用,我该如何解决这个问题 string address = “My URL”; webBrowser.Navigate(new Uri(address)); do { Application.DoEvents(); } while (webBrowser.ReadyState != WebBrowserReadyState.Complete);

代表与BackgroundWorker的差异?

任何人都可以解释委托和BackgroundWorker之间的区别吗?在哪种情况下,Backgroundworker比Delegate更有效?因为我们有异步委托,所以需要使用BackGroungWorker。

使用Backgroundworker的正确方法

我正在使用backgroundworker来显示加载屏幕。 DO事件如下: private void bwLoadingScreen_DoWork(object sender, DoWorkEventArgs e) { _ls = new LoadingScreen(); _ls.Show(); while (!bwLoadingScreen.CancellationPending) { Application.DoEvents(); } } 我使用以下代码来处理Loadingscreen: if (_ls.InvokeRequired && !_ls.IsDisposed) { Invoke(new MethodInvoker(delegate { _ls.Close(); _ls.Dispose(); })); } else if (!_ls.IsDisposed) { _ls.Hide(); _ls.Dispose(); } 我应该使用RunWorkerCompleted事件吗? 这是使用Backgroundworker的正确方法吗?

后台工人类取消,设置取消挂起标志但不退出

我叫obackgroundworker.CancelAsync(); 在一个后台工作者当前在另一个线程中做一些工作,然后使用while(obackgroundworker.IsBusy == true)等待它完成退出应用程序之前(如果用户改变主意,而线程正在处理并且我想要干净地关闭) 取消挂起的单位正确设置为true但是线程没有退出,在工作线程中我有: backgroundworker obackgroundworker = (backgroundworker)sender; if (obackgroundworker.cancellationpending == true) e.cancel = true; 应检查取消是否待定,然后将取消的标志设置为true,我认为这也会导致线程实际终止…? 或者,当它检测到取消实际结束时,是否需要从线程调用其他函数? 我已经阅读了很多使用背景工作者的例子,并且没有报告任何问题。 资料来源: http://www.albahari.com/threading/part3.aspx http://www.dotneat.net/2009/02/10/BackgroundworkerExample.aspx http://www.codeproject.com/KB/cpp/BackgroundWorker_Threads。 ASPX 谢谢

Thread.Join()导致死锁

我总共有三个主题。 第一个是主UI线程,它启动System.Threading.Thread ( ExperimentThread ),然后启动BackgroundWorker ( WorkerThread )。 MainThread和WorkerThread都访问共享资源。 我使用以下对象同步对此资源的访问: private static readonly Object LockObject = new Object(); 我在每个线程的主循环中使用如下: lock (LockObject) { // Do something with shared resource here. } ExperimentThread的简化版本如下: public void RunExperiment { while (!bStopThread) { lock (LockObject) { // Do something with shared resource here. } if (bStopThread) { break; } else […]

在解析非常大的日志文件时保持UI响应

我正在编写一个解析非常大的日志文件的应用程序,以便用户可以以树视图格式查看内容。 我已经使用BackGroundWorker来读取文件,并且在解析每条消息时,我使用BeginInvoke来获取GUI线程以将节点添加到我的树视图中。 不幸的是,有两个问题: 在解析文件时,树视图无法响应点击或滚动。 我希望用户能够在文件解析时检查(即展开)节点,这样他们就不必等待整个文件完成解析。 每次添加新节点时,树视图都会闪烁。 这是表单中的代码: private void btnChangeDir_Click(object sender, EventArgs e) { OpenFileDialog browser = new OpenFileDialog(); if (browser.ShowDialog() == DialogResult.OK) { tbSearchDir.Text = browser.FileName; BackgroundWorker bgw = new BackgroundWorker(); bgw.DoWork += (ob, evArgs) => ParseFile(tbSearchDir.Text); bgw.RunWorkerAsync(); } } private void ParseFile(string inputfile) { FileStream logFileStream = new FileStream(inputfile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader […]

c#后台工人类

我想把这个方法放到后台工作者类中,我正在尝试但是卡住了,任何人都可以帮助我如何将这个方法运行到后台工作者类中: 我将此方法调用到我的asp.net页面,其中文件在服务器上压缩,然后返回到客户端。 但压缩文件可能需要更长时间,用户将看到一个忙碌的屏幕,所以为了避免我想使用后台工作者类: [Ajax.AjaxMethod(Ajax.HttpSessionStateRequirement.ReadWrite)] public string Zip(string f, bool original) { string zip = “”; try { files = HttpContext.Current.Server.UrlDecode(files); string[] fileCollection = files.Split(‘*’); zipFile = class1.zipfile(fileCollection, IsOriginal); int fileLength = files.Length; } catch (Exception ex) { Console.WriteLine(“Exception during processing {0}”, ex); } return File; }