0

タイマーで textBlock を変更できません。

これが私のコードです:

    private void Play_Button_Click(object sender, RoutedEventArgs e)
    {
            timer = new System.Timers.Timer(1000);
            timer.Elapsed += new ElapsedEventHandler(displayTime);
            timer.Enabled = true;
            try
            {
               // video.Play();
            }
            catch (Exception exp)
            {
                Console.WriteLine("error: " + exp.Message);
            }
        }
     }

    private void displayTime(object source, ElapsedEventArgs e)
    {
        textProgression.Text = "Test";
    }

毎秒、関数 displayTime が呼び出されますが、textProgression の値は変更されません。

4

1 に答える 1

1

WPF で UI を変更する場合は、WPF スレッド (ディスパッチャー スレッド) で行う必要があります。

これには、次の 2 つのオプションがあります。

スレッドを使用し、displayTime で textProgression.Text = "Test"; を呼び出します。ディスパッチャで:

private void displayTime(object source, ElapsedEventArgs e)
{
    Dispatcher.Invoke(new Action(() =>
    {
        textProgression.Text = "Test";
    }));
}

または、ここで私が推測する最良の方法は、DispatcherTimer. このタイマーでは、すべてのTickイベントが Dispatcher スレッドで発生するためです。

private void dispatcherTimer_Tick(object sender, EventArgs e)
{
    textProgression.Text = "Test";
}
于 2013-02-05T15:56:09.937 に答える