WPF:输出正确但窗口没有显示

时间:2016-11-18 22:36:56

标签: c# wpf do-while timespan

我正在开发一个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);

后来我发现无论哪个窗口都移动了这个代码,其他窗口都会正常显示,但每次使用此代码切换到窗口时,窗口都不会显示。有谁有想法吗?提前谢谢!

1 个答案:

答案 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)。