我正在开发一个WPF应用程序。我需要一个方法每5秒运行一次并输出它捕获的信息。我使用DateTime的差异来决定是否已经过了5秒。当我开始运行它时,我可以看到每5秒输出一次正确的信息。但是,应用程序的窗口没有显示,我也无法在状态栏中找到它的图标。这是我的代码public MainWindow():
InitializeComponent();
DateTime now;
DateTime _lastTime5SecondsHadPassed = DateTime.Now; ;
TimeSpan elapsed;
do
{
now = DateTime.Now;
elapsed = now - _lastTime5SecondsHadPassed;
if (elapsed.Seconds >= 10)
{
title = GetActiveWindowTitle();
Trace.WriteLine(title);
_lastTime5SecondsHadPassed = DateTime.Now;
}
} while (true);
后来我发现无论哪个窗口都移动了这个代码,其他窗口都会正常显示,但每次使用此代码切换到窗口时,窗口都不会显示。有谁有想法吗?提前谢谢!
答案 0 :(得分:1)
克莱门斯是完全正确的。您正在生成无限循环的当前代码,该循环不允许程序的其余部分继续。
以下代码在WPF Tutorial无耻地被盗。
Xaml for Window:
<Window x:Class="WpfTutorialSamples.Misc.DispatcherTimerSample"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="DispatcherTimerSample" Height="150" Width="250">
<Grid>
<Label Name="lblTime" FontSize="48" HorizontalAlignment="Center" VerticalAlignment="Center" />
</Grid>
</Window>
背后的代码:
using System;
using System.Windows;
using System.Windows.Threading;
namespace WpfTutorialSamples.Misc
{
public partial class DispatcherTimerSample : Window
{
public DispatcherTimerSample()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += timer_Tick;
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
lblTime.Content = DateTime.Now.ToLongTimeString();
}
}
}
您将注意到Window的构造函数创建一个计时器1秒钟。每一秒,窗口上的标签都会更新为DateTime.Now.ToLongTimeString()
的值(例如10:30:15)。