大家好日子。 任何人都可以告诉我,当我的应用程序启动时,我怎样才能每秒重复执行我的功能?我根据我在这里和谷歌找到的一些例子设置了计时器。但是,当我运行我的应用程序时,没有任何事情发生。
这是代码
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 :(得分:0)
也许它与某些事情有关:
您没有调用您的函数InitTimer,或者您没有启用计时器。我使用c #WindowsFormsApplications。我不知道这是否与WPF不同。
我希望它有所帮助
答案 1 :(得分:0)
主要是RvA是正确的,你不是在调用InitTimer,或者至少不是你在问题中提供的代码。
当你调用InitTimer时,你的代码应该运行得很好。 但是我建议你看一下TPL(Task Parallel Libary),这个问题在这个stackoverflow问题中有所解释:Proper way to implement a never ending task. (Timers vs Task)
答案 2 :(得分: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定义为void func();
希望这有帮助。
答案 3 :(得分:0)
您应该订阅Window的Loaded事件并在事件处理程序中调用InitTimer()函数:
public SomeWindow()
{
Loaded += SomeWindow_Loaded;
}
private void SomeWindow_Loaded(object sender, RoutedEventArgs e)
{
InitTimer();
}