0

これは私のシナリオです:

ClassA
{
  Timer tmr = new Timer(1000);
  void Start()
     {
       tmr.start();
     }

  void tmr_Elapsed(object sender, ElapsedEventArgs e)
        {

            //Do Something
            if (myCondition==true)
            {
                //Do Something

                tmr.Stop(); // Or Change Value of a Property! anything that shows it
                            //meets the condition.
            }
        }
}


Class WorkflowController
{
   list<ClassA> allA=new list<ClassA>(){new A1,new A2, new A3}
   void Start()
   {
     foreach(item in allA)
     {
        item.start()
     } 
   }
}

質問:

ここで、foreach loopを実行A1.Start()して、タイマーが条件 (ここx>50と 50 秒後) を満たし、停止するまで待ちます。次に実行A2.Start() し、タイマーが条件を満たし、再び停止するまで待機します。その後、実行A3.Start()されます。アプリケーションのWorkFlowControllerワークフローを制御します。それを行う簡単な方法は何なのかわかりません。利用しましょうINotifyPropertyChangedか?使いEventhandlerましょうか?またはより良い方法はありますか?

4

4 に答える 4

1
private async void Start()
{
    foreach (var item in all)
    {
         await item.DoWorkAsync();
    }
}

public class ClassA
{
    public async Task DoWorkAsync()
    {
        bool done = false;

        while(!done)
        {
            DoStuff();
            DoMoreStuff();

            if(someCondition)
            {
                done = true;
            }
            else
            {
                await Task.Delay(1000);
            }
        }
    }
}
于 2013-07-09T10:29:15.467 に答える
1

この次の実装でタスクを使用できます。

List<ClassA> all = new List<ClassA> { ... };
private async void Start()
{
    foreach (var item in all)
    {
         await item.DoWork();
    }
}

public class ClassA
{
    public async Task DoWork()
    {
        Thread.Sleep(50000); // wait 50sec
        // Do work            
    }
}

ここに「方法: 1 つまたは複数のタスクが完了するのを待つ」があります。

それが助けになることを願っています!

于 2013-07-09T09:39:34.830 に答える
0

実際には、コードは同じように見えます。

for(var i = 0; i < 3; i++)
{
    Thread.Sleep(1000)
    Task.Wait(Task.StartNew(() =>
        {
            //Do Something
            if (myCondition==true)
            {
                // Do Something
                // Or Change Value of a Property! anything that shows it
                // meets the condition.
            }
        });
}
于 2013-07-09T10:39:43.743 に答える