使用下面的代码自动调用报告。但是30秒后应用程序挂起(即UI冻结)几秒钟。
如何在不挂问题的情况下解决这个问题。 下面是我的代码
System.Windows.Threading.DispatcherTimer dispatcherTimer2 = new
System.Windows.Threading.DispatcherTimer();
dispatcherTimer2.Tick += new EventHandler(dispatcherTimer2_Tick);
dispatcherTimer2.Interval = new TimeSpan(0, 0, 30);
dispatcherTimer2.Start();
private void dispatcherTimer2_Tick(object sender, EventArgs e)
{
automaticreportfunction();
}
30秒后它会挂起应用程序,如何解决这个问题
答案 0 :(得分:0)
DispatcherTimer
在背景线中运行。 Tick-Event中的所有方法都在UI-Tread
中运行。这就是你的应用程序将冷冻的原因。您必须将automaticreportfunction()
移动到后台线程才能使UI保持活动状态。
因此,你有几个机会。我个人更喜欢使用BackgroundWorker
(我知道还有其他方法,但我最喜欢这个)。因此,在您的Tick
- 活动中,您可以执行以下操作:
private void dispatcherTimer2_Tick(object sender, EventArgs e)
{
DispatcherTimer dispatcherTimer = (DispatcherTimer)sender;
dispatcherTimer.Stop();
BackgroundWorker backgroundWorker = new BackgroundWorker();
backgroundWorker.DoWork += (bs, be) => automaticreportfunction();
backgroundWorker.RunWorkerCompleted += (bs, be) => dispatcherTimer.Start();
backgroundWorker.RunWorkerAsync();
}
当你输入tick-method并在automaticreportfunction
完成后再次重启时,我也会停止计时器,否则你可以在执行仍然运行时再次输入方法。