暂停并恢复WPF中的执行

时间:2013-06-09 15:34:04

标签: c# wpf multithreading

有没有办法在WPF App中暂停和恢复执行[特别是在ViewModel类中]? 我尝试过使用Auto和ManualResetEvent类。但是在我想暂停的时候它并没有暂停。 waitone方法不会暂停执行。

在我的viewmodel中,我有一个调用Web服务的方法。 Web服务的结果将是另一种方法[即回调方法]。从Web服务获得结果后,我想继续执行。

public void Method1()
{
   for(int i=0; i<5; i++)
   {
      // Call the web service. No waiting for the result.
      // Block the execution here....
   }
}

public void CallBackMethod(int serviceResult)
{
   // After getting the result...
   // I want to continue with Method1...
}

有没有办法在WPF中执行此操作?

2 个答案:

答案 0 :(得分:1)

你在谈论ManualResetEvent

private ManualResetEvent _reset;

public void Method1()
{  
   _reset = new ManualResetEvent(true);
   for(int i=0; i<5; i++)
   {
       // Call the web service.

       // WaitOne blocks the current thread 
       _reset.WaitOne();
   }
}

public void CallBackMethod(int serviceResult)
{
   // After getting the result...

   // Set allows waiting threads to continue
   _reset.Set();
}

答案 1 :(得分:0)

但为什么你需要在循环中这样做呢?只需在调用回调方法时再次运行该服务:

int count =0;
const int MAX_CALLS = 5;

public void RunService()
{
    //do service stuff
}

public void CallBackMethod(int serviceResult)
{
    if (count++ < MAX_CALLS)
        RunService ();
}
public static void Main (string[] args)
{
    RunService ();
}