winfrom如让控制线程的执行顺序

小大飞 2015-02-04 05:00:18
我有3个主要的任务,被写成3个主方法,方法里面还会调用其他方法等。
使用winfrom做的,因为三个方法执行都需要很长的时间,特别是第三个方法,可能需要很多天。
为了不让窗体卡死,我决定使用多线程,我已经解决了,跨线程访问出错的问题,也可以将单个方法,交给一个后台线程执行,但是我有三个方法,显然我都要交给后台线程去执行,但是我不管是用三个线程,还是一个线程,它的执行顺序都很混乱,用一个线程时,它先执行的是最后一个方法,用3个线程时它是跑来跑去,没有顺序。
我需要严格按照Func1 ,Func2,Func3的顺序依次执行,因为后一个方法需要前一个方法生成的文件。
如果既使用多线程,还能让方法,按照一定顺序执行,有什么办法吗?求高手指导下。
...全文
333 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-02-05
  • 打赏
  • 举报
回复
好比一个任务,包饺子 本来是可以擀皮和和馅一起干(多线程)的,然后等这两个步骤完了,再一起包 现在你说了:必须先擀皮,再和馅,和完了才能包 那还非弄3个人在那里一个等一个干什么,一个人自己干不好吗
於黾 2015-02-05
  • 打赏
  • 举报
回复
引用 7 楼 wyd1520 的回复:
[quote=引用 5 楼 tong386166552 的回复:] [quote=引用 1 楼 wyd1520 的回复:] 用Net 4.0 的Task就能控制了。
不会用Task,这个好像4.5以上才有。[/quote] 那你得写用好多的AutoEventSet了。。。用多少个线程就写多少个。每个线程里都用这个做阻塞,控制。[/quote] 那跟单线程有任何区别?为什么非要多线程
本拉灯 2015-02-05
  • 打赏
  • 举报
回复
引用 5 楼 tong386166552 的回复:
[quote=引用 1 楼 wyd1520 的回复:] 用Net 4.0 的Task就能控制了。
不会用Task,这个好像4.5以上才有。[/quote] 那你得写用好多的AutoEventSet了。。。用多少个线程就写多少个。每个线程里都用这个做阻塞,控制。
於黾 2015-02-05
  • 打赏
  • 举报
回复
既然第三个线程需要前两个线程的数据 那为什么还开3个线程 开1个线程,依然顺序执行不就得了 反正只要不放到主线程里执行就不会阻塞UI 既然第三个函数本身就要执行好几天,还在乎先执行2个函数耗费的那点时间吗,并行执行有任何意义?
小大飞 2015-02-05
  • 打赏
  • 举报
回复
引用 1 楼 wyd1520 的回复:
用Net 4.0 的Task就能控制了。
不会用Task,这个好像4.5以上才有。
小大飞 2015-02-05
  • 打赏
  • 举报
回复
引用 3 楼 sp1234 的回复:
如果你想执行
var a = 1;
var b= a +2;
这种程序,你还让前后两条语句并行执行,这有什么意义啊?这可绝对是滥用线程了。
不是的,我的方法执行时间很长,为了不使winform界面卡死,所以用的多线程。
  • 打赏
  • 举报
回复
如果你想执行
var a = 1;
var b= a +2;
这种程序,你还让前后两条语句并行执行,这有什么意义啊?这可绝对是滥用线程了。
  • 打赏
  • 举报
回复
引用 楼主 tong386166552 的回复:
用一个线程时,它先执行的是最后一个方法,用3个线程时它是跑来跑去,没有顺序。 我需要严格按照Func1 ,Func2,Func3的顺序依次执行,因为后一个方法需要前一个方法生成的文件。
你在“一个”线程所调用的方法中难道不是
void MyThreadStart()
{
    Func1();
    Func2();
    Func3();
}
难道你还能写成什么奇怪的逻辑来? 贴出你的最基本的代码来。
本拉灯 2015-02-04
  • 打赏
  • 举报
回复
用Net 4.0 的Task就能控制了。

4,819

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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