C#关于winform线程更新form的文本框输出的问题

我需要写一个winform执行一套根据数据库表遍历文件并执行增删的功能。现在需要在winform每检索一个文件,都在winform的textbox中输出一行"XXX文件未... 我需要写一个winform执行一套根据数据库表遍历文件并执行增删的功能。
现在需要在winform每检索一个文件,都在winform的textbox中输出一行"XXX文件未找到"、"XXX文件已删除"
因为处理需要几分钟事件,如果直接在button的click事件里写,winform会卡住,程序未响应,直到检索完数据库以后工作完成,才会在textbox里一次性显示所有的文字。
我现在想要达到的效果是,点击button后,winform不会卡住未响应,并且每处理数据库里的一条记录,都在textbox里显示一条"ID为XXX的记录文件未找到"或者"ID为XXX的记录文件已删除"。
我了解到需要新增一个工作线程处理这些耗时的工作,但是我并不知道如何去写这些代码,求指点如何使用新线程处理这份工作,新线程怎么才能操作form的文本框文字让她能够动态显示?
展开
 我来答
376710727
2016-10-17 · TA获得超过8937个赞
知道大有可为答主
回答量:2593
采纳率:100%
帮助的人:1289万
展开全部

使用多线程和委托。

你的目的其实概括来说,就是后台线程去处理文件, 当“找到”或者“未找到”时,通知UI去更新文本为“XX找到”“XX未找到”。

伪代码:

//定义一个事件 

public delegate void MyDelegate(bool isDone, string requestResult);
//这里定义一个委托,有两个参数, 一个是是否结束,第二个是返回的结果值(string)
public event MyDelegate  myEvent = null;// 注册事件


var thread = new System.Threading.Thread(new System.Threading.ThreadStart(() =>
{
     //这里去遍历啊  执行啊 乱七八糟的  最好封装成函数  
     // rst是提示的文本, 需要你前面函数里面返回,比如"xx找到了";       
      myEvent.Invoke(true, rst);
      //当执行结束时, 返回false
      //myEvent.Invoke(false,rst);
})) 
{ IsBackground = true };
thread.Start();
sysbusyEvent += (state, result) =>
{
      Application.Current.Dispatcher.BeginInvoke(new Action(() =>
      {
           if(result!=string.Empty)
           {
               //前台UI更新
               myTextBox.Text = result ;
           }
           if (state == false)
           {
               sysbusyEvent = null; //清理事件
           }
      }));
};

这样后台线程会去处理他的事情,每当他处理掉一件,就会Invoke回来一个状态给前台,

而UI线程(主线程)会一直监听这个事件,当有回调(Invoke)时,去处理这些信息,

就可以达到你要求的目的,即UI线程不阻塞(不会卡死),且后台还在执行一些耗时的运算。

syht2000
高粉答主

2016-10-17 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部

百度搜索一下   

BackgroundWorker 简单使用教程

你只需要把bw_DoWork中的方法体换成你自己的循环和遍历就行了

当你处理完一个文件,要输出时,记得在那个bw_DoWork中用这种写法


 this.Invoke((MethodInvoker)delegate
 {
 textBox1.AppendText"XXX文件未找到\n");
textBox1.ScrollToCaret();
  });
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式