如何通知方法已完成某事

时间:2014-09-08 09:54:24

标签: c# .net

我的构造函数除了其他东西之外还调用了另一种方法DoWork

public MyTask(TaskAction action)
{
   DoWork(action);
}

DoWork方法转到另一种方法Calc(2)

private void Calc (int 2){
   ... calc and save result into file         
}

如何提醒MyTask Calc已完成并让MyTask继续进行。

P.S。我可以每隔几秒阅读一次硬盘,以便查看带有结果的文件是否保存并继续进一步继续,但我认为有更好的方法。

2 个答案:

答案 0 :(得分:0)

BackgroundWorker课程可让您轻松管理异步工作。

        BackgroundWorker _worker = new BackgroundWorker();

        public Cnt()
        {
            InitializeComponent();
            _worker.DoWork += WorkerOnDoWork;
            _worker.RunWorkerCompleted += WorkerOnRunWorkerCompleted;
            //start your work
            _worker.RunWorkerAsync();    
        }

        private void WorkerOnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //Worker completed event
        }

        private void WorkerOnDoWork(object sender, DoWorkEventArgs e)
        {
            //Do   
        }

答案 1 :(得分:0)

有很多方法可以做到这一点。最新推荐的是使用任务

Task taskA = new Task(() => { Console.WriteLine("Task A started"); });
taskA.ContinueWith((ss) => { Console.WriteLine("Task A finished"); });
taskA.Start();

http://msdn.microsoft.com/en-us/library/ee372288(v=vs.110).aspx
这样你可以根据需要阻止当前线程。

另一种方法是BackGroundWorker类

此外,您可以使用像这样的自定义回调

using System;
namespace ConsoleApplication1
{
   class Program
   {
     static void Main(string[] args)
     {
        DoWorkA(DoWorkFinished);
        Console.Read();
     }

    private static void DoWorkA(Action whatToDoWhenFinished)
    {
        Console.WriteLine("Doing something");
        whatToDoWhenFinished();
    }

    private static void DoWorkFinished()
    {
        Console.WriteLine("Doing something Else");
    }
 }
}
相关问题