0

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

2 に答える 2

4

IEが実行されている場合、ボタンを無効にしてメッセージを表示しますが、IEを閉じても元に戻りません。これは、タイマーティックイベントでプロセスを取得していないために発生しています。したがって、以下に示すようにコードを変更してください。

dispatcherTimer2.Tick += new EventHandler(dispatcherTimer2_Tick);
dispatcherTimer2.Interval = TimeSpan.FromMilliseconds(100);
dispatcherTimer2.Start();

private void dispatcherTimer2_Tick(object sender, EventArgs e)
{
    Process[] aProc = Process.GetProcessesByName("IExplore"); 
    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;
    }
}
于 2014-03-26T11:48:51.360 に答える