草庐IT

BackGroundWorker

全部标签

c# - 更新后台 worker winforms中的标签文本

我正在使用BackGroundWorker类在sqlserver中插入一些值。我在这里有for循环来插入值。我正在使用以下代码publicvoidbw_Convert_DoWork(objectsender,DoWorkEventArgse){e.Result=e.Argument;for(inti=0;i我如何在这里更新Label1文本 最佳答案 这应该可以从后台线程更改GUI。Label1.Invoke((MethodInvoker)delegate{Label1.Text=i.ToString()+"FilesConverte

c# - 当前进程的性能计数器 CPU 使用率超过 100

我想显示我的多线程应用程序(在多核处理器上工作)的CPU使用情况。我想收到接近任务管理器的号码。但我得到的数字超过100%。甚至超过500%。是的,我知道,对于类别"Process"的计数器"%ProcessorTime"我需要划分为Environment.ProcessorCount或“NumberOfLogicalProcessors”(与我的配置相同)。而500%是此操作之后的结果。我在具有不同硬件(i7、i5、Core2)和软件配置(具有所有更新的Windows7SP1、具有所有更新的Windows2008R2SP1)的不同计算机上测试了这个示例,但遇到了同样的问题。publi

c# - .NET Web 服务和 BackgroundWorker 线程

我正在尝试在网络服务方法中执行一些异步操作。假设我有以下API调用:http://www.example.com/api.asmx并且该方法称为GetProducts()。在这个GetProducts方法中,我做了一些事情(例如,从数据库中获取数据),然后在我返回结果之前,我想做一些异步事情(例如,给我发一封电子邮件)。这就是我所做的。[WebMethod(Description="Balblahblah.")]publicIListGetProducts(){//Blahblahblah..//GetdatafromDB..hiDB!//varmyData=.......//Moar

C# 使用 backgroundworker 进程更新和追加文本框值

我有一个我放在一起的c#Windows窗体应用程序。这很简单:\输入:文本字符串源文件夹路径目标文件夹路径整数计数应用程序在源文件夹中的文本文件中搜索输入的文本字符串;如果找到该字符串,则将该文件和同名图像文件复制到目标文件夹。但是,它会根据整数输入执行多次。所以我有一个按钮,在按钮点击事件中我调用ProcessImages(tbDID.Text,tbSource.Text,tbDest.Text,comboBoxNumberImages.SelectedItem.ToString());即:privatevoidProcessImages(stringDID,stringSource

c# - 来自不同类 c# 的报告进度 backgroundworker

在我的.NETC#项目中,我使用了“BackgroundWorker”来调用不同类中的方法。以下是我的主窗体的源代码publicpartialclassForm1:Form{publicForm1(){InitializeComponent();}testClasst1=newtestClass();privatevoidbackgroundWorker1_DoWork(objectsender,DoWorkEventArgse){t1.changevalue(1000);}privatevoidbackgroundWorker1_ProgressChanged(objectsende

c# - 如何实现停止/取消按钮?

我有一个方法processData()需要大量数据并对其进行一些处理。有一个启动处理的开始按钮。我需要一个取消按钮,它可以在任何位置停止处理。我怎样才能实现这样的事情?我不明白的是如何在处理开始后使取消按钮可用,因为在函数运行时UI的其余部分被卡住。 最佳答案 BackgroundWorker.CancelAsync方法是你需要的。Here对你来说是一个很好的例子。如果您有一个耗时的过程,您将不得不使用一个单独的线程来处理它以支持取消。如果您在主线程(UI线程)中执行那个耗时的过程,它将很忙,并且在完成该任务之前不会考虑您的取消请求

c# - 如何在 Winform 中使用多线程?

我是多线程新手。我有一个带有标签和进度条的winform。我想显示处理结果。首先,我使用Application.DoEvents()方法。但是,我发现表格很僵硬。然后我在MSDN上阅读了一些关于多线程的文章。其次,我使用BackgroundWorker来完成它。this.bwForm.DoWork+=(o,arg)=>{DoConvert();};this.bwForm.RunWorkerAsync();表单不会卡住,我可以在处理时拖放。不幸的是,它会抛出InvalidOperationException。所以我必须使用这个。Control.CheckForIllegalCrossTh

c# - 在 C# 中使事件异步的最佳方法

事件在C#中是同步的。我有这个应用程序,其中我的主窗体启动一个线程,其中有一个循环监听流。当流中出现某些事件时,就会从循环中向主窗体触发一个事件。如果主窗体运行缓慢或显示消息框或其他内容,循环将被暂停。解决这个问题的最佳方法是什么?通过在主窗体上使用回调和调用? 最佳答案 由于您使用的是表单,因此更简单的方法是使用BackgroundWorker组件。TheBackgroundWorkerclassallowsyoutorunanoperationonaseparate,dedicatedthread.Time-consumingo

C# Winform ProgressBar 和 BackgroundWorker

我有以下问题:我有一个名为MainForm的表单。我有一个很长的手术要在这张表格上进行。在这个漫长的操作过程中,我需要在MainForm之上显示另一个名为ProgressForm的操作。ProgressForm包含一个进度条,需要在长时间操作发生时更新。长操作完成后,ProgressForm应该自动关闭。我写了下面的代码:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Threading;namespaceClassLibrary{pub

c# - 持续运行 BackgroundWorker

我需要能够持续运行我的BackgroundWorker。DoWork事件包含池线程进程,OnComplete更新我的UI。我无法找到一种方法来无限循环BackgroundWorker.RunWorkerAsync()方法而不卡住整个程序。任何帮助将不胜感激。 最佳答案 您必须在DoWork-Method中创建一个循环。要更新您的UI,您应该使用ProgressChanged-Method。这是一个小例子,这看起来像publicTest(){this.InitializeComponent();BackgroundWorkerback