2014-03-19 83 views
0

對你們所有人來說都是美好的一天。 任何人都可以告訴我,我的應用程序何時啓動,我該如何每秒重複執行一次函數?根據我在這裏和谷歌發現的一些例子,我設置了計時器。但是,當我運行我的應用程序時,沒有任何事情發生。如何開始在WPF應用程序中執行計時器功能

這裏是代碼

public void kasifikuj() 
    { 
     if (File.Exists(@"E:\KINECT\test.txt")) 
     { 
      File.Delete(@"E:\KINECT\test.txt"); 
     } 
     File.AppendAllText(@"E:\KINECT\test.txt", shoulderRightY + " " + shoulderLeftY + " " + headY + " " + hipY + Environment.NewLine); 

     double detect = Program.siet(); 
     vysledok.Text = detect.ToString(); 


    } 

    private Timer timer1; 
    public void InitTimer() 
    { 
     timer1 = new Timer(); 
     timer1.Tick += new EventHandler(timer1_Tick); 
     timer1.Interval = 1000; // in miliseconds 
     timer1.Start(); 
    } 

    public void timer1_Tick(object sender, EventArgs e) 
    { 
     kasifikuj(); 
    } 

編輯:

或者你可以建議另一種方式來運行我kasifikuj()方法每秒好嗎?

+0

你在哪裏調用InitTimer()? – NullReferenceException

回答

0

也許有事情做與:

你不打電話給你的功能InitTimer或者你尚未啓用定時器。我使用c#WindowsFormsApplications工作。我不知道這是不是WPF。

我希望它能幫助

0

主要RvA的是正確的,你是不是叫InitTimer,或至少不是在你已經在你的問題中提供的代碼。

當你調用InitTimer時,你的代碼應該工作得很好。 不過我建議你看看TPL(任務並行Libary),這是在這個計算器的問題解釋說:Proper way to implement a never ending task. (Timers vs Task)

0

我發現類似的東西放在這裏了一段時間後,我覺得這裏....

public static class DelayedExecutionService 
{ 
    public static void DelayedExecute(Action action, int delay = 1) 
    { 
     var dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); 

     EventHandler handler = null; 
     handler = (sender, e) => 
     { 
      // Stop the timer so it won't keep executing every X seconds 
      // and also avoid keeping the handler in memory. 
      //dispatcherTimer.Tick -= handler; 
      //dispatcherTimer.Stop(); 

      // Perform the action. 
      action(); 
     }; 

     dispatcherTimer.Tick += handler; 
     dispatcherTimer.Interval = TimeSpan.FromSeconds(delay); 
     dispatcherTimer.Start(); 
    } 
} 

使用方法如下

DelayedExecutionService.DelayedExecute(RefreshLList, 1); 
DelayedExecutionService.DelayedExecute(UpdateLList, 1); 

凡RefreshLList和UpdateLList被定義爲空隙FUNC();

希望這會有所幫助。

0

您應該訂閱窗口的Loaded事件,並呼籲InitTimer()函數在事件處理程序:

public SomeWindow() 
    { 
     Loaded += SomeWindow_Loaded; 
    } 

    private void SomeWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     InitTimer(); 
    } 
相關問題