none
多线程问题 RRS feed

  • 问题

  • 才学习多线程,请各位老师指教。

    最近在制作一个等待窗口(例如:窗体A中点击计算按钮,开始启动线程,线程的功能就是窗体B显示,同时窗体A继续计算,等待A执行完后,关闭线程),请问在关闭线程的时候怎么才能关闭窗体B?

    我的实现思维是不是错误的?


    没有鞋子的人很多,但聪明的人会想到借,因为这样要比赤脚跑得快。

    2012年8月29日 8:41

答案

  • 把计算部分的代码拿出来,与 Ui 操作分开。然后按照如下伪代码尝试。

    Task<int> calculationTask = new Task<int>(() => { ... });
    myWaitingForm.Show();
    calculationTask.ContinueWith(t => { myWaitingForm.Close(); this.CalculatedResult = t.Result; } );

    或者

    myWaitingForm.Show();
    this.CalculatedResult = await Task.Run(() => { ... });
    myWaitingForm.Close();


    Mark Zhou

    • 已标记为答案 IItouch 2012年8月31日 6:33
    2012年8月30日 5:26

全部回复

  • 没有理解你的意思……你要多线程跨窗体执行?


    下载MSDN桌面工具(Vista,Win7)
    我的博客园
    慈善点击,点击此处

    2012年8月30日 2:09
    版主
  • 我觉得这个实现思路有些问题。。因为所有的 UI 界面上的操作都必须在跑在主线程上,无论 A 窗体 or  B 窗体。。

    我觉得可以把窗体 A 里面的计算操作抽出来,放到一个线程里面处理。

    当线程启动的时候,打开 B 窗体;当线程结束的时候,关闭 B 窗体。。


    学习学习....

    2012年8月30日 2:29
  • 把计算部分的代码拿出来,与 Ui 操作分开。然后按照如下伪代码尝试。

    Task<int> calculationTask = new Task<int>(() => { ... });
    myWaitingForm.Show();
    calculationTask.ContinueWith(t => { myWaitingForm.Close(); this.CalculatedResult = t.Result; } );

    或者

    myWaitingForm.Show();
    this.CalculatedResult = await Task.Run(() => { ... });
    myWaitingForm.Close();


    Mark Zhou

    • 已标记为答案 IItouch 2012年8月31日 6:33
    2012年8月30日 5:26