社区
C#
帖子详情
多线程 界面卡死
Cazrael
2011-07-20 05:47:46
现在在写一个类似一键安装的东西
其中一个Copy()方法由于计算量大会导致界面卡死
于是将Copy()方法放到子线程里进行
newThread.Start();
newThread.Join();
......//需要继续执行的代码
但这样仍然会导致主界面开始
现在要求主线程等待子线程结束后继续执行后面的代码
但是主界面(一个Form)不会卡死!
求一方法!
...全文
1021
21
打赏
收藏
多线程 界面卡死
现在在写一个类似一键安装的东西 其中一个Copy()方法由于计算量大会导致界面卡死 于是将Copy()方法放到子线程里进行 newThread.Start(); newThread.Join(); ......//需要继续执行的代码 但这样仍然会导致主界面开始 现在要求主线程等待子线程结束后继续执行后面的代码 但是主界面(一个Form)不会卡死! 求一方法!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Cazrael
2011-08-18
打赏
举报
回复
结贴 直接用invoke()函数就行
zengguoyu
2011-08-01
打赏
举报
回复
如果是在用不好线程,就使用控件Backgroundworker,它有三个事件,其中有一个DoWork 是处理数据的事件,也就你把你的Copy、操作发在这个事件中执行就行了,这样界面就不会卡死
您必须非常小心,确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
这样完全不用你自己去处理线程,希望对你有帮助
wind4fly
2011-07-22
打赏
举报
回复
Join()等待线程结束。
Join(1000)等待1000毫秒后继续。
aXen
2011-07-22
打赏
举报
回复
长时间操作不要放在主线程中。不然窗口没有机会处理消息。
lazyleland
2011-07-22
打赏
举报
回复
如果FrmMainCopyFinish有更新UI的操作,则要再使用代理,调用this.Invoke方法转到主线程。
lazyleland
2011-07-22
打赏
举报
回复
private event EventHandler CopyFinish;
private void Copy()
{
this.CopyFinish += new EventHandler(FrmMainCopyFinish);
System.Threading.Thread t = new Thread(new ThreadStart(CopyInNewThread));
}
private void CopyInNewThread()
{
// Copy...
//
if (this.CopyFinish != null)
CopyFinish(null, null);
}
void FrmMainCopyFinish(object sender, EventArgs e)
{
// palapala...
}
soaringbird
2011-07-22
打赏
举报
回复
事件、委托、回调
xianzhong2008
2011-07-22
打赏
举报
回复
把JOIN()去掉不就ok了
Cazrael
2011-07-22
打赏
举报
回复
我现在明白JOIN就是阻塞线程的意思了。。求解决方案 最好给出代码 谢谢
Cazrael
2011-07-22
打赏
举报
回复
[Quote=引用 10 楼 niss 的回复:]
楼主的意思是一口气执行完这个任务,其中有个子任务很耗时间是不是,不想卡住主界面,但如果放到线程里又要求主界面必须等待整个任务的完成才允许用户操作是不是?这个样子给主界面加个等待画面行不?
[/Quote]
就是这位朋友的这个意思
但是不知道怎么实现咯 加个等待画面 怎么得到子线程完成的消息 然后继续执行主线程剩下的任务呢 能给出例子或具体代码么 我比较菜 谢谢
以专业开发人员为伍
2011-07-22
打赏
举报
回复
[Quote=引用楼主 cazrael 的回复:]
现在在写一个类似一键安装的东西
其中一个Copy()方法由于计算量大会导致界面卡死
于是将Copy()方法放到子线程里进行
newThread.Start();
newThread.Join();
......//需要继续执行的代码
但这样仍然会导致主界面开始
现在要求主线程等待子线程结束后继续执行后面的代码
但是主界面(一个Form)不会卡死!
……
[/Quote]
看不懂你的意思。
“后面的代码”都卡死了,主界面还不卡死吗?
你可以把“后面的代码”也一并移到线程中的方法,它去调用。
niss
2011-07-21
打赏
举报
回复
楼主的意思是一口气执行完这个任务,其中有个子任务很耗时间是不是,不想卡住主界面,但如果放到线程里又要求主界面必须等待整个任务的完成才允许用户操作是不是?这个样子给主界面加个等待画面行不?
636f6c696e
2011-07-21
打赏
举报
回复
你界面卡死的原因是操作UI的线程也就是主线程必须等子线程操作完再继续操作,由于copy的时间很长,相当于有一部分时间UI无法响应,所以卡死.
你可以创建一个线程去等newThread,然后执行继续的代码.
或者newThread结束后往主线程发送一个消息,主线程收到后继续执行代码.
ghost5216
2011-07-21
打赏
举报
回复
现在要求主线程等待子线程结束后继续执行后面的代码
但是主界面(一个Form)不会卡死!
这个要求很矛盾
可以把线程启动代码放在末尾,后面没有代码,才不会卡
sdl2005lyx
2011-07-21
打赏
举报
回复
用Form.Invoke( Delegate method) :在拥有此控件的基础窗口句柄的线程上执行指定的委托。
bustersword
2011-07-21
打赏
举报
回复
Join();......Blocks the calling thread until a thread terminates.
Cazrael
2011-07-21
打赏
举报
回复
[Quote=引用 2 楼 yuwenge 的回复:]
Copy里面不要有操作ui的动作。
[/Quote]
没有 只有一个很干净的复制文件的函数
mjay0210
2011-07-21
打赏
举报
回复
哥们 你都join了 还能咋说呢 ....
好好了解下join
Cazrael
2011-07-21
打赏
举报
回复
[Quote=引用 7 楼 colinfang2006 的回复:]
你可以创建一个线程去等newThread,然后执行继续的代码.
或者newThread结束后往主线程发送一个消息,主线程收到后继续执行代码.
[/Quote]
能讲讲后者的具体实现么
就是想通过后者来实现 可是不会。。
卧_槽
2011-07-20
打赏
举报
回复
Copy里面不要有操作ui的动作。
加载更多回复(1)
WinForm
多线程
+委托防止
界面
卡死
1、当有大量数据需要计算、显示在
界面
或者调用sleep函数时,容易导致
界面
卡死
,可以采用
多线程
加委托的方法解决 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using
Java
多线程
界面
卡死
_WinForm
多线程
+委托防止
界面
卡死
1、当有大量数据需要计算、显示在
界面
或者调用sleep函数时,容易导致
界面
卡死
,可以采用
多线程
加委托的方法解决using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.W...
QT
多线程
—主
界面
卡死
解决方案
由于耗时的操作会独占系统cpu资源 ,让
界面
卡死
在那里,这时需要考虑
多线程
方案,将耗时的操作放在主线程之外的线程中执行。 但是必须注意:主
界面
更新只能在主线程中,耗时操作可以放在新建的线程中。
c#
多线程
防止
界面
卡死
当我们的
界面
需要在程序运行中不断更新数据时,当一个textbox的数据需要变化时,为了让程序执行中不出现
界面
卡死
的现像,最好的方法就是
多线程
来解决 一个主线程来创建
界面
,使用一个子线程来执行程序并更新主
界面
这个问题其实也困或了我很久,但是今天终于解决了,而且我发现很多人有这样的问题,所以我分享一个例子方便大家参考吧。 先来看看我的
界面
当我点击开启线程后 下面是我的
Winform
多线程
--解决
界面
卡死
问题
Winform
多线程
--解决
界面
卡死
问题
C#
111,131
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章