社区
C#
帖子详情
子线程可以控制主线程中的控件的状态吗
jason_mf
2006-10-25 04:51:04
我用一个子线程A检查另外另外2个子线程是否结束,
结束就在线程A中显示一个MessageBox,点击MessageBox的确定
按钮就要在主线程的StatusBar上Remove一个Panel,该怎么写?
...全文
263
3
打赏
收藏
子线程可以控制主线程中的控件的状态吗
我用一个子线程A检查另外另外2个子线程是否结束, 结束就在线程A中显示一个MessageBox,点击MessageBox的确定 按钮就要在主线程的StatusBar上Remove一个Panel,该怎么写?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
3 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Knight94
2006-10-25
打赏
举报
回复
我总觉得是你写得有问题,至于如何修改,你可以参考我前面介绍的文章。
jason_mf
2006-10-25
打赏
举报
回复
to Knight94(愚翁)
请教
=======================
private delegate void degCheckEnd(Janus.Windows.UI.StatusBar.UIStatusBar statusBar);
private void CheckEndThread()
{
degCheckEnd degCE = new degCheckEnd(CheckEnd);
this.Invoke(degCE, new object[] { this.uiStatusBar1 });
}
private void CheckEnd(Janus.Windows.UI.StatusBar.UIStatusBar statusBar)
{
bool isEnd = false;
do{
Thread.Sleep(100);
isEnd = false;
//threadArray保存需检查的子线呈
foreach (Thread th in this.threadArray)
{
if (th.ThreadState != System.Threading.ThreadState.Stopped)
{
isEnd = true;
}
}
if (isEnd == false)
{
if (MessageBox.Show("检查的子线程结束", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
{
statusBar.Panels.RemoveAt(2);
}
}
} while (isEnd);
}
Thread thEnd = new Thread(CheckEndThread);
thEnd.Start();
我这样写,需检查的子线程好像就一直不结束,
写成下面的,子线程就会结束,但就不能控制ui线呈了。
//private delegate void degCheckEnd(Janus.Windows.UI.StatusBar.UIStatusBar statusBar);
//private void CheckEndThread()
//{
// degCheckEnd degCE = new degCheckEnd(CheckEnd);
// this.Invoke(degCE, new object[] { this.uiStatusBar1 });
//}
private void CheckEnd()
{
bool isEnd = false;
do
{
Thread.Sleep(100);
isEnd = false;
foreach (Thread th in this.threadArray)
{
if (th.ThreadState != System.Threading.ThreadState.Stopped)
{
isEnd = true;
}
}
if (isEnd == false)
{
if (MessageBox.Show("检查的子线程结束", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information) == DialogResult.OK)
{
//statusBar.Panels.RemoveAt(2);
}
}
} while (isEnd);
}
Thread thEnd = new Thread(CheckEnd);
thEnd.Start();
Knight94
2006-10-25
打赏
举报
回复
子线程无法直接操作,需要用Invoke或者BeginInvoke来控制UI线程。
参看
http://blog.csdn.net/Knight94/archive/2006/08/24/1111267.aspx
MFC
子
线程
访问/
控制
对话框程序
控件
MFC
子
线程
访问/
控制
对话框程序
控件
C#
主
线程
显示数据,
子
线程
获取数据
C# Winfrom必须掌握的技术,
主
线程
显示数据,
子
线程
获取数据,这是我做项目实际用到的技术。
MFC
子
线程
中
更新
控件
内容的两种办法
MFC
子
线程
中
更新
控件
内容的两种办法 MFC
子
线程
中
更新
控件
内容的两种办法
C#
子
线程
调用
主
线程
窗体的解决方法
由于Windows窗体
控件
本质上不是
线程
安全的。因此如果有两个或多个
线程
适度操作某一
控件
的
状态
(set value),则可能会迫使该
控件
进入一种不一致的
状态
。还可能出现其他与
线程
相关的bug,包括争用和死锁的情况。所以VS2005这一改动便可以增强
线程
安全性。 我想大家更关心的是如何解决这个问题,如何才能操作其它
线程
中
的
控件
而不引发异常,接下来我们来探讨下这个问题: 第一种方法: 这种方法我没用过,因为大家推荐不要使用,所以我没去实验过,具体方法如下(摘自网上): 设置System.Windows.Forms.Control.CheckForIllegalCrossTh
C#利用
子
线程
刷新
主
线程
分享教程
本文将详细介绍C#利用
子
线程
如何刷新
主
线程
,需要了解更多的朋友可以参考下
C#
111,120
社区成员
642,537
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章