我看了一些例子,但都是对进度条的例子。我不是太明白,耗时操作该放在哪里?貌似在DoWork事件中不能对界面控件进行操作,那么如何实现对控件的操作呢?比如我现在要后台运行如下一段程序:
rtxtTestResults.Text = "导入数据中.";
OleDbConnection myConn = new OleDbConnection(strCon);
string strCom = " SELECT * FROM [" + name + "$] where 测试日期 = #"+date+"#";
myConn.Open();
OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn);
ds = new DataSet();
myCommand.Fill(ds);
myConn.Close();
dataGridView1.DataSource = ds.Tables[0];
rtxtTestResults.Text = "导入完毕.";
这段程序该放在它的哪个事件里面。另外我想实现这么一个功能:在后台运行的时候,rtxtTestResults要每隔200ms添加一个点。程序运行完rtxtTestResults则显示导入完毕。请帮我把上面的东西及要求用BackGroundWorker来实现下。我本来是用的多线程,但是软件一样的会假死。
PS:把我上面的功能要求及给出的程序用BackGroundWorker补充完整。高分。满意再加50分。
PS:要代码,上干货。
如图片
还是要卡一下。跟原来用多线程一样的效果。
追答啥叫卡一下?
追问假死,界面拖不动。等程序运行完了才能拖动界面。
追答不会啊,我导入差不多5w条数据都没卡,就显示到界面卡了下而已啊
我也不知道怎么回事了,代码都一样的。可能是我导入的Excel工作表的列数太多,有200多列。但是有非常的列是空列,并没有数据。导其他正常的工作表速度很快,也不卡。
追答你给我你Excel看看
追问这个是链接:
http://pan.baidu.com/s/1sjG60Fj
我上传不了。你下载下吧,50+kb。我用的该表格中的“老化记录”工作表测试的。其他工作表没问题,速度很快。我可以把我的解决方案一并发给你。
下面是解决方案链接:
http://pan.baidu.com/s/1kTtIejX
改下查询语句就好了,你后面好多没数据列一起查进来,而且不是后台查询导致的卡,是你赋值给datagridview的时候卡的。你这个都没多少数据,没必要放到一个后台线程执行的,麻烦
string strCom = " SELECT [测试日期],[产品型号],[数量],[起止MAC号],[产品单号],[版本],[测试人],[备注] FROM [老化记录$] ";
我是图方便。按你的思路的话,用户选择不同的表名,我就要给strCom赋不同的查询语句值了。你的思路也可行。
追答你可以把表名和查询写到一个文件,进入程序后你可以读取这个文件并存进一个字典里面(表名作 key 查询作 value),选表的时候就可以根据表拿到查询了
表名:查询语句
老化记录:SELECT [测试日期],[产品型号],[数量],[起止MAC号],[产品单号],[版本],[测试人],[备注] FROM [老化记录$]
BackgroundWorker示例代码
以下是根据要求改写后的文章内容,以HTML片段形式呈现:在C#的Windows Forms应用程序中,BackgroundWorker是一个实用工具,用于在后台执行耗时任务,如计算斐波那契数列,同时保持用户界面的响应。实例代码展示了如何初始化和使用BackgroundWorker:构造函数: 在FibonacciForm的构造函数中,初始化BackgroundWorker并设...
如何显示进度条
第一种:使用BackgroundWorker进行进度条控制 BackgroundWorker对象有三个主要的事件:DoWork - 当BackgroundWorker对象的多线程操作被执行时触发。RunWokerCompleted - 当BackgroundWoker对象的多线程操作完成时触发。ProgressChanged - 当BackgroundWorker对象的多线程操作状态改变时触发。WorkerReportsProgress - ...
C#网络编程与多线程的疑问,求指点
\/\/设定BackgroundWorker要做的事 bg.DoWork += new DoWorkEventHandler(bg_DoWork); \/\/设定BackgroundWorker支持中断线程 bg.WorkerSupportsCancellation = true; } \/\/线程要做的事的主体部分 private void bg_DoWork(object sender, DoWorkEventArgs e) { \/\/在这里,假设了...
c#编程如何避免程序未响应出现
BackgroundWorker是.net里用来执行多线程任务的控件,它允许编程者在一个单独的线程上执行一些操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 始终处于停止响应状态。如果您需要能进行响应的用户界面,而且面临与这类操作相关的长时间延迟,则可以使用 BackgroundWorker 类方...
C#多线程编程
四:线程同步技术 线程同步技术是为了保证多个线程安全地访问共享资源而设计的。使用锁或其他同步机制,确保同一时刻只有一个线程访问共享资源,避免数据损坏。在处理共享资源访问时,同步机制至关重要。在多线程环境中,应避免并发访问同一资源,使用监视器对象、锁或其他同步工具,确保线程访问资源时的互斥性和...
手把手教你写上位机软件(c#、winform)
StatusStrip、ToolStrip、HelpProvider、ToolStripContainer和BackgroundWorker等控件教程,带你逐步掌握Winform核心组件。 从基础到精通的C#串口通信教程,涵盖协议理解、工具使用、并发处理和数据校验,让你成为通信高手。20-27节深入讲解位运算、多线程等高级技巧。 《C# Modbus通信》系列教程,涵盖了Modbus ...
如何显示进度条
使用C#显示进度条,涉及到多线程编程,我只探索了使用BackgroundWorker和Thread的方法,下面分别列出。第一种:使用BackgroundWorker进行进度条控制 BackgroundWorker对象有三个主要的事件:DoWork - 当BackgroundWorker对象的多线程操作被执行时触发。RunWokerCompleted - 当BackgroundWoker对象的多线程操作完成...
如何显示进度条
使用C#显示进度条,涉及到多线程编程,我只探索了使用BackgroundWorker和Thread的方法,下面分别列出。第一种:使用BackgroundWorker进行进度条控制 BackgroundWorker对象有三个主要的事件:DoWork - 当BackgroundWorker对象的多线程操作被执行时触发。RunWokerCompleted - 当BackgroundWoker对象的多线程操作完成...
如何显示进度条
使用C#显示进度条,涉及到多线程编程,我只探索了使用BackgroundWorker和Thread的方法,下面分别列出。第一种:使用BackgroundWorker进行进度条控制 BackgroundWorker对象有三个主要的事件:DoWork - 当BackgroundWorker对象的多线程操作被执行时触发。RunWokerCompleted - 当BackgroundWoker对象的多线程操作完成...
如何显示进度条
使用C#显示进度条,涉及到多线程编程,我只探索了使用BackgroundWorker和Thread的方法,下面分别列出。第一种:使用BackgroundWorker进行进度条控制 BackgroundWorker对象有三个主要的事件:DoWork - 当BackgroundWorker对象的多线程操作被执行时触发。RunWokerCompleted - 当BackgroundWoker对象的多线程操作完成...