c#主线程与子线程如何通信

hellofking 2009-09-22 04:55:42
当登陆窗体的登陆按钮被按下时,我启动一个子线程去显示进度条,第一个要求是如果在进度条显示过程中,已查出数据(无论用户名和密码正确与否)马上关闭进度条窗体,并立即显示主窗体或错误提示;第二个要求是:假设在进度条走完以后,也没有查出数据,这样就会出现假死状态,为了解决这个问题,我想让进度条停留在90%的位置等候查询结果,当结果出来以后再走,然后在显示窗体或提示错误,有哪位高手指点一下,或者介绍c#方面讲解多线程的书或视频教程都可以,谢谢
...全文
278 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqiuzaihui 2009-09-23
  • 打赏
  • 举报
回复
使用委托:


//子线程中
public delegate void ProgreccBarHandler(int value, string strInfor); //定义委托显示进度条的信息

public ProgreccBarHandler SetProBar; //显示进度条的信息

//设置状态栏
if (this.SetProBar != null)
SetProBar(90, "Information");



//主界面中(myManager为线程实例)
this.myManager.SetProBar = this.SetProgreccBar; //显示进度条信息

/// <summary>
/// 显示线程回传的进度条的信息
/// </summary>
/// <param name="value">进度条的当前值</param>
/// <param name="strInfor">当前提示信息</param>
public void SetProgreccBar(int value, string strInfor)
{
if (this.InvokeRequired)
{
try
{
this.Invoke(new MessageHandler(SetProgreccBar),
new object[] { value, strInfor });
}
catch(Exception e)
{
Console.WriteLine(e.Source + " " + e.Message);
}
}
else
{
this.tlProBar.Value = value; //设置滚动条
this.tlLabInfor.Text = strInfor; //设置提示信息
this.staStr.Refresh(); //刷新状态栏
}
}


类似地, 可以在线程中声明其它的委托, 然后回传给主线程(主界面)响应.
hellofking 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 vwxyzh 的回复:]
反正放进度条也是假的,干脆放个无限转圈的gif不就行了
[/Quote]

我要是作个假的还来提问干什么,不知道你有什么好办法或者经验可以分享一下吗?
hellofking 2009-09-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhzuo 的回复:]
你的问题可以通过BackgroundWorker来解决。我在博客里面写了文章对你的这个应用进行分析,并提供了完整代码下载,请参考。
使用BackgroundWorker组件进行异步操作编程
http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx
实现增强的异步任务执行组件
http://blog.csdn.net/zhzuo/archive/2008/07/23/2699847.aspx
[/Quote]

谢谢你,我正在看你的博客写的资料,如果有不懂的是否可以请你帮忙?
vwxyzh 2009-09-22
  • 打赏
  • 举报
回复
反正放进度条也是假的,干脆放个无限转圈的gif不就行了
marvelstack 2009-09-22
  • 打赏
  • 举报
回复
你的问题可以通过BackgroundWorker来解决。我在博客里面写了文章对你的这个应用进行分析,并提供了完整代码下载,请参考。
使用BackgroundWorker组件进行异步操作编程
http://blog.csdn.net/zhzuo/archive/2008/07/23/2699305.aspx
实现增强的异步任务执行组件
http://blog.csdn.net/zhzuo/archive/2008/07/23/2699847.aspx
miflower 2009-09-22
  • 打赏
  • 举报
回复
用线程来监听列 开个线程来检查它的状态,只要是非正常状态,就吧它赋空,重新再new下
hellofking 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 coconutyf 的回复:]
嘿嘿,楼主有创意呀
[/Quote]

如果会就回答,不会就别回复,我是初学者,实在不会了才来这里请高手帮忙的,你这种为了分而回复的......
LutzMark 2009-09-22
  • 打赏
  • 举报
回复
交给BackgroundWorker来做吧
http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx
coconutyf 2009-09-22
  • 打赏
  • 举报
回复
嘿嘿,楼主有创意呀

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧