c#winform新线程中循环处理数据会卡住的问题。 按理说多线程界面不会有卡的现,因为是两个线程,新开的线程和UI线程不是一个线程,跨线程访问UI会出现问题,所以很可能出现在更新UI的语句上。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我就是用listView1.Items.Add()方法来更新ui的啊,应该是不会出现问题的啊。。 我就是用listView1.Items.Add()方法来更新ui的啊,应该是不会出现问题的啊。。有没有用begininvoke啊? 捕获你的子线程中的程序抛出的异常。debug和release编程是不一样的。debug需要即时调试,而release需要容错,因此代码不一样。你做到了吗? 我就是用listView1.Items.Add()方法来更新ui的啊,应该是不会出现问题的啊。。有没有用begininvoke啊?没有,这个是干什么用的? 我就是用listView1.Items.Add()方法来更新ui的啊,应该是不会出现问题的啊。。把这个方法定义成委托的调用,用控件的invoke去调用委托 实现方法 试试吧 看看委托刷新UI有没有问题,附个示例:public class MyForm : System.Windows.Forms.Form { //UI 元素 private Label lblStatus; private ProgressBar progressBar1; //Delegate private delegate void MyProgressEventsHandler( object sender, MyProgressEvents e); private void UpdateUI(object sender, MyProgressEvents e) { lblStatus.Text = e.Msg; myProgressControl.Value = e.PercentDone; } //ShowProgress 现在可以记录为可从任何线程调用的公共方法。 public void ShowProgress(string msg, int percentDone) { if(InvokeRequired) { System.EventArgs e = new MyProgressEvents(msg, percentDone); object[] pList = { this, e }; BeginInvoke(new MyProgressEventsHandler(UpdateUI), pList); } else { UpdateUI(this, new MyProgressEvents(msg, PercentDone)); } } private void btnStart_Click(object sender, EventArgs e) { //启动线程 Thread t = new Thread(new ParameterizedThreadStart(RunsOnWorkerThread)); t.IsBackground = true; t.Start(input); } //线程执行函数 private void RunsOnWorkerThread() { int i = 0; while(...) //loop { DoSomethingSlow(); ShowProgress("test",i); ++i; } } } img 显示图片?? 注册的信息不能插入数据库 我想随机生成100个五位数,要求每个五位数中不包含38 62 正则怎么写? 请问Win7怎么配置.net,MSSQL环境啊? 新手求教:在做毕业设计,希望给份C/S架构的认识管理系统源代码! 这个问题怎么就没有人回答呢? SQL数据导出到Access数据库有简单的办法吗? 不管C#未来的路在何方,我会继续努力下去的!~ 在线求大神帮忙看看IIS配置问题,本人新手 获取网络中的计算机名?????? c# 路过的大神帮我看下这么样才能再listview里面实现点击网址就能打开网页
捕获你的子线程中的程序抛出的异常。debug和release编程是不一样的。debug需要即时调试,而release需要容错,因此代码不一样。你做到了吗?
把这个方法定义成委托的调用,用控件的invoke去调用委托 实现方法 试试吧
public class MyForm : System.Windows.Forms.Form {
//UI 元素
private Label lblStatus;
private ProgressBar progressBar1; //Delegate
private delegate void MyProgressEventsHandler(
object sender, MyProgressEvents e);
private void UpdateUI(object sender, MyProgressEvents e) {
lblStatus.Text = e.Msg;
myProgressControl.Value = e.PercentDone;
} //ShowProgress 现在可以记录为可从任何线程调用的公共方法。
public void ShowProgress(string msg, int percentDone)
{
if(InvokeRequired)
{
System.EventArgs e = new MyProgressEvents(msg, percentDone);
object[] pList = { this, e }; BeginInvoke(new MyProgressEventsHandler(UpdateUI), pList);
}
else
{
UpdateUI(this, new MyProgressEvents(msg,
PercentDone));
}
} private void btnStart_Click(object sender, EventArgs e)
{
//启动线程
Thread t = new Thread(new ParameterizedThreadStart(RunsOnWorkerThread));
t.IsBackground = true;
t.Start(input);
} //线程执行函数
private void RunsOnWorkerThread()
{
int i = 0;
while(...) //loop
{
DoSomethingSlow();
ShowProgress("test",i);
++i;
}
}
}