WPF ウィンドウでディスパッチャー タイマーの一部を使用すると、問題が発生します。ウィンドウでは通常タイマーを使用しますが、この関数は WPF フォームには存在しないようですのでDispatcherTimer
、同等であるとアドバイスされました。
だから私はこれらのタイマーを3つ持っています:
30 秒ごとの最初の 1 つは、フォームを前方に移動します。これは正しく機能します。
dispatcherTimer1.Tick += new EventHandler(dispatcherTimer1_Tick);
dispatcherTimer1.Interval = TimeSpan.FromSeconds(30);
dispatcherTimer1.Start();
private void dispatcherTimer1_Tick(object sender, EventArgs e)
{
this.Topmost.Equals(true);
this.Activate();
this.BringIntoView();
this.Focus();
this.Topmost.Equals(false);
}
2 つ目は、IExplorer が実行されているかどうかを 100 ミリ秒ごとにチェックし続けます。実行されている場合は [OK] ボタンを非表示にし、ユーザーに IExplorer を閉じるように指示するメッセージをフォームに表示します - IE が実行されている場合にフォームを実行すると、ボタンが無効になり、メッセージを表示しますが、IE を閉じても元に戻りません。
IEが開いているか閉じている場合にタイマーを常に実行してフォームを更新するにはどうすればよいですか?
public Process[] aProc = Process.GetProcessesByName("IExplore");
dispatcherTimer2.Tick += new EventHandler(dispatcherTimer2_Tick);
dispatcherTimer2.Interval = TimeSpan.FromMilliseconds(100);
dispatcherTimer2.Start();
private void dispatcherTimer2_Tick(object sender, EventArgs e)
{
if (aProc.Length == 0)
{
richTextBox3.Visibility = System.Windows.Visibility.Hidden;
button1.Visibility = System.Windows.Visibility.Visible;
}
else
{
button1.Visibility = System.Windows.Visibility.Hidden;
richTextBox3.Visibility = System.Windows.Visibility.Visible;
}
}
そして 3 番目に、2 番目のタイマーが 100 ミリ秒ごとに実行されるように、ユーザーが [OK] ボタンをクリックすると、ユーザーが呼び出しを試みた場合に IExplorer プロセスを強制終了したいのですが、2 番目のタイマーのようにそうではありません常に動いているようです。
何か案は?
dispatcherTimer3.Tick += new EventHandler(dispatcherTimer3_Tick);
dispatcherTimer3.Interval = TimeSpan.FromMilliseconds(100);
dispatcherTimer3.Start();
private void dispatcherTimer3_Tick(object sender, EventArgs e)
{
Process[] Processes = Process.GetProcessesByName("IExplore");
foreach (Process Proc1 in Processes)
{
Proc1.Kill();
}
}