社区
C#
帖子详情
子线程可以控制主线程中的控件的状态吗
jason_mf
2006-10-25 04:51:04
我用一个子线程A检查另外另外2个子线程是否结束,
结束就在线程A中显示一个MessageBox,点击MessageBox的确定
按钮就要在主线程的StatusBar上Remove一个Panel,该怎么写?
...全文
249
3
打赏
收藏
子线程可以控制主线程中的控件的状态吗
我用一个子线程A检查另外另外2个子线程是否结束, 结束就在线程A中显示一个MessageBox,点击MessageBox的确定 按钮就要在主线程的StatusBar上Remove一个Panel,该怎么写?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
C#
主
线程
显示数据,
子
线程
获取数据
在Winform应用
中
,我们可以创建一个新的后台
线程
(
子
线程
)来执行数据获取任务,同时确保
主
线程
保持响应,更新UI。以下是一般的步骤: 1. **定义异步方法**:首先,你需要定义一个返回`Task`的异步方法,用于执行...
MFC
子
线程
访问/
控制
对话框程序
控件
-
子
线程
可以通过在`OnIdle()`函数
中
处理UI更新,这是一个在
主
线程
空闲时被调用的回调。 - 使用`OnIdle()`可避免频繁的
线程
同步,提高性能。 8. **CWinApp::ProcessMessageFilter()** - 可以重载`CWinApp`的`...
MFC
子
线程
中
更新
控件
内容的两种办法
然而,直接在
子
线程
中
更新UI
控件
可能会导致程序崩溃或不稳定,这是因为UI
控件
的操作通常需要在
主
线程
中
进行。因此,在MFC
中
,我们需要采用合适的方法确保UI更新操作在
主
线程
中
执行。本文将详细介绍MFC
中
更新
控件
内容...
C#
子
线程
调用
主
线程
窗体的解决方法
因此如果有两个或多个
线程
适度操作某一
控件
的
状态
(set value),则可能会迫使该
控件
进入一种不一致的
状态
。还可能出现其他与
线程
相关的bug,包括争用和死锁的情况。所以VS2005这一改动便可以增强
线程
安全性。 我想...
C#利用
子
线程
刷新
主
线程
分享教程
与`GetTime`方法类似,`ShowResult`也需要检查`InvokeRequired`,并根据情况使用`Invoke`来确保在
主
线程
中
安全更新`txtResult`
控件
。 3. **使用`Application.DoEvents()`**: 在`GetTime`和`Add`方法
中
,调用了`...
C#
111,092
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章