C#多线程界面卡死怎么办 5
大家看下这些代码:其中getProductGroup.....这个发发是耗时方法我改如何改进可以贴出来下代码吗???...
大家看下这些代码 : 其中getProductGroup.....这个发发是耗时方法 我改如何改进 可以贴出来下代码吗???
展开
2个回答
展开全部
你应该是想要进度条一边走一边获取产品清单吧。
BeginInvoke是单线程异步的,实际并没起到你想要的作用。如果getProductGroup不涉及界面操作,就不要BeginInvoke了。
直接在getProductGroup里写Thread,获取清单,直接start才能达到你要的效果。
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();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
BeginInvoke默认就会开线程,你再新创建一个Thread去执行,多此一举呀。
看代码,感觉你想用APM模式,就是类似Begin*** End***的方式
可以这么写:private void ***Click(***)
{
toolStripLabel2.Enabled = false; StartGetProductGroup();
}
即可。
如果提示 无法跨线程调用的错误的时候,可以把那些界面control 异步Invoke一下:
toolStripLabel2.invoke((Action)(()=>{toolStripLable2.Enabled=false;}))
看代码,感觉你想用APM模式,就是类似Begin*** End***的方式
可以这么写:private void ***Click(***)
{
toolStripLabel2.Enabled = false; StartGetProductGroup();
}
即可。
如果提示 无法跨线程调用的错误的时候,可以把那些界面control 异步Invoke一下:
toolStripLabel2.invoke((Action)(()=>{toolStripLable2.Enabled=false;}))
更多追问追答
追问
这样子出错啊
追答
什么错误?
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询