Как вызвать какой-либо метод через некоторое время (500 миллисекунд) в SilverLight - PullRequest
1 голос
/ 08 марта 2012

У меня есть два метода, например, Method1 и Method2. Как я могу вызвать Method2 через 500 мс после завершения Method1?

 public void Method1()
 {

 }

 public void Method2()
 {

 }

Ответы [ 3 ]

6 голосов
/ 08 марта 2012

Используйте либо Таймер , либо BackgroundWorker . Таймер, вероятно, больше всего подходит для вашего краткого описания, если вы не хотите что-то делать в потоке пользовательского интерфейса, в этом случае DispatchTimer лучше для вас, так как он вызывает в потоке пользовательского интерфейса.

Пример:

  public void Run_Method1_Then_Method2_500_Milliseconds_Later()
  {
      DispatcherTimer timer = new DispatcherTimer();
      timer.Interval = TimeSpan.FromMilliseconds(500);
      timer.Tick += (s, e) =>
      {
          // do some quick work here in Method2
          Method2(timer);
      };

      Method1();      // Call Method1 and wait for completion
      timer.Start();  // Start Method2 500 milliseconds later
  }

  public void Method1()
  {
      // Do some work here
  }

  public void Method2(DispatcherTimer timer)
  {
      // Stop additional timer events
      timer.Stop();
      // Now do some work here
  }
1 голос
/ 08 марта 2012
Task.Factory.StartNew( () => 
{
    Methdd1();
    Thread.Sleep(500);
    Method2();
});

EDIT

Из-за проблемы, выделенной @spender, этот код проблематичен и может привести к истощению потоков (см .: http://msdn.microsoft.com/en-us/library/ff963549.aspx). Таймер, предложенный @HiTech Magic, кажется, лучший путь.

0 голосов
/ 19 июля 2013
System.Timers.Timer aTimer = new System.Timers.Timer(10000);
// Hook up the Elapsed event for the timer.
aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
// Set the Interval to 60 seconds (60000 milliseconds).
aTimer.Interval = 60000;
//for enabling for disabling the timer.
aTimer.Enabled = false;

private void OnTimedEvent(object source, ElapsedEventArgs e)
{
 //disable the timer
 aTimer.Enabled = false;
 Method2();
}
public void Method1()
{
 //some code
 aTimer.Enabled = true;
}
public void Method2()
{


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...