c# 调用线程处理耗时操作返回结果 怎么实现

三人行必有我师焉 2014-08-11 10:27:56

主函数要运行四个步骤, 任何步骤失败,则停止后续步骤
每个步骤都是耗时操作,所以用线程

现在疑惑是 : 线程 funStep1 怎么把运行结果 告诉 step1
然后 step1 怎么得到 funstep1的运行结果 反馈到 main里面来

新手,分不过,请包涵,谢谢


void main()
{
if (!step1()) MessageBox.Show("步骤1失败");

if (!step2()) MessageBox.Show("步骤2失败");

if (!step3()) MessageBox.Show("步骤3失败");

if (!step4()) MessageBox.Show("步骤4失败");
}

private bool step1(object sender, EventArgs e)
{

Thread newThread = new Thread(funStep1);
newThread.IsBackground = true;
newThread.Start();

这里怎么接收返回信息
}

string funStep1()
{
string info;
........

return info;
}
...全文
431 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2014-08-11
  • 打赏
  • 举报
回复
好比你要出去旅游,分4个步骤 1.订酒店 2.订飞机票 3.打车 4.收拾行李 要想保证中间不出差错,你应该一步一步来,如果订不到酒店,就不要订飞机票了 如果想保证速度,可以同步进行,但是就会有一个问题,如果行李都收拾好了,但是订不到酒店,你的行程就必须取消了 可以定义个全局bool变量,任何一步没有成功,都将它置为false 等4个步骤都执行完,判断一下,然后进行后续处理
sunny906 2014-08-11
  • 打赏
  • 举报
回复
用委托实现

delegate string funStep1Del();
funStep1Del del= new funStep1Del(funStep1);
IAsyncResult re= del.BeginInvoke();
string result = del.EndInvoke(re); //在这里获取返回值
string funStep1();
三色 2014-08-11
  • 打赏
  • 举报
回复
创建公共变量放置4个线程运行结果, 在运行线程前先请清空, 不你的线程反馈的结果是一个int 那么定义 int result1; int result2; int result3; int result4; 调用线程前,以上变量清空, 然后在线程调用函数结尾处赋值。 最后在主进程中判断。 不过主进行中在每个调用线程后需要设置等待,否则程序直接执行完了。 所以,你的逻辑本身就是有问题的,按你的要求此处线程不合理,因为step2依赖于step1的结果,这种情况直接写在进程里即可。
事理 2014-08-11
  • 打赏
  • 举报
回复
在step1()方法里面执行成功的地方调用step2(),在step2()执行成功的地方调用step3(),以此类推,或者使用timer控件检测,搞一个全局变量,在step1执行成功的地方设置全局变量值,然后在timer里面判断全局变量值,然后执行step2等,建议用第一种方法
於黾 2014-08-11
  • 打赏
  • 举报
回复
既然步骤1,2,3,4是必须顺序执行,你应该放到同一个线程里执行 啊 否则线程1还没执行完,线程2就先执行完了,你又如何判断线程1失败,线程2不执行?
於黾 2014-08-11
  • 打赏
  • 举报
回复
引用 6 楼 u013485053 的回复:
请问 step1 里面 怎么 判断 funStep1 是否结束 , funStep1是个耗时操作,因为这里不希望界面假死,所以用了线程
step1里为什么要判断funStep1结束? 它不过是个方法,是启动线程用的,启动完就没它什么事了. 主线程想判断所有线程结束,你可以再开个线程5,在线程5里执行1234,然后thread.join(),等待开启的线程全部结束,然后执行后面的方法
  • 打赏
  • 举报
回复
引用 5 楼 Z65443344 的回复:
好比你要出去旅游,分4个步骤 1.订酒店 2.订飞机票 3.打车 4.收拾行李 要想保证中间不出差错,你应该一步一步来,如果订不到酒店,就不要订飞机票了 如果想保证速度,可以同步进行,但是就会有一个问题,如果行李都收拾好了,但是订不到酒店,你的行程就必须取消了 可以定义个全局bool变量,任何一步没有成功,都将它置为false 等4个步骤都执行完,判断一下,然后进行后续处理
请问 step1 里面 怎么 判断 funStep1 是否结束 , funStep1是个耗时操作,因为这里不希望界面假死,所以用了线程

110,539

社区成员

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

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

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