2016-11-18 15 views
0

WPFアプリケーションを開発中です。私は5秒ごとに実行し、キャプチャする情報を出力するメソッドが必要です。私はDateTimeの差を使って5秒が経過したかどうかを判断しました。私がそれを走らせると、5秒ごとに正しい情報が出力されるのがわかりました。しかし、アプリケーションのウィンドウが表示されず、どちらもステータスバーのアイコンではありません。ここに私のコードの公共メインウィンドウ()である:WPF:出力が正しいが、ウィンドウが表示されない

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); 

後で私が見つけた私はにこのコードを動かす方の窓、他のウィンドウが正常に表示されるだろうが、それは、このコードでウィンドウに切り替えたときに毎回、ウィンドウは表示されませんアップ。誰にも分かりますか?前もって感謝します!

+2

これは、MainWindowコンストラクタを永遠にブロックする無限ループです。明らかにウィンドウは表示されません。そのコードをすべて投げ捨て、代わりにタイマ、代わりにDispatcherTimerを使用してください。 – Clemens

答えて

1

クレメンスは絶対に正しいです。あなたがプログラムの残りの部分を続けることを許さない無限ループを作り出している現在のコード。

WPF Tutorialから次のコードを恥知らずに盗まれています。 Windowの

XAML:

<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(); 
       } 
     } 
} 

あなたはウィンドウのコンストラクタは、1秒のタイマーを作成することに注意します。毎秒、ウィンドウ上のラベルはDateTime.Now.ToLongTimeString()(10:30:15など)の値に更新されます。

+0

これは動作します!!ありがとうございます!!! – Lolo

+0

回答が正しいとマークして、他の人が質問が解決されたことを知ってください。それは投票の下のチェックマーク(答えの左側)です。 – techvice

+0

さようなら!私はそれをマークしました! – Lolo

関連する問題