C#多线程界面卡死怎么办 5

大家看下这些代码:其中getProductGroup.....这个发发是耗时方法我改如何改进可以贴出来下代码吗???... 大家看下这些代码 : 其中getProductGroup.....这个发发是耗时方法 我改如何改进 可以贴出来下代码吗??? 展开
 我来答
paperkey
2013-12-23 · TA获得超过517个赞
知道小有建树答主
回答量:713
采纳率:0%
帮助的人:192万
展开全部
你应该是想要进度条一边走一边获取产品清单吧。
BeginInvoke是单线程异步的,实际并没起到你想要的作用。如果getProductGroup不涉及界面操作,就不要BeginInvoke了。
直接在getProductGroup里写Thread,获取清单,直接start才能达到你要的效果。
更多追问追答
追问
Invoke  BeginInvoke   我都试过了   不知道如何解决 可以贴出来下代码吗
追答
都说了,不能invoke,用了这个你的getProductGroup就会和界面上的操作放在一个线程里,invoke和begenInvoke都是在一个线程里模拟多任务操作。必须使用Thread单独开新的线程。你的getProductGroup方法应该是数据库操作吧,那完全不用放在invoke委托里。
private void StartGetProductGroup()
{
Thread t = new Thread(new ThreadStart(delegate{
getProductGroupDelagate();
}));
t.IsBackground=true;
t.Start();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友3831f2b
2013-12-23 · TA获得超过162个赞
知道小有建树答主
回答量:143
采纳率:100%
帮助的人:93万
展开全部
BeginInvoke默认就会开线程,你再新创建一个Thread去执行,多此一举呀。
看代码,感觉你想用APM模式,就是类似Begin*** End***的方式
可以这么写:private void ***Click(***)
{
toolStripLabel2.Enabled = false; StartGetProductGroup();
}
即可。

如果提示 无法跨线程调用的错误的时候,可以把那些界面control 异步Invoke一下:
toolStripLabel2.invoke((Action)(()=>{toolStripLable2.Enabled=false;}))
更多追问追答
追问
这样子出错啊
追答
什么错误?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式