WPF 调整大小操作结束不适用于 Systems.Timers.Timer class

WPF end of resizing operation doesn't work with Systems.Timers.Timer class

我试图在 WPF 中使用计时器捕捉 window 调整大小过程的结束。首先,我使用了 System.Timers 的计时器,它不起作用,我更改为此处所述的解决方案 (System.Windows.Threading.DispatcherTimer):

How to catch the ending resize window?

现在一切正常,但是有人知道这种行为的原因吗?早期的解决方案是使用来自 System.Timers 命名空间的经典计时器来结束调整大小操作。我是否被迫使用 DispatcherTimer?

提前致谢...

你可以用 System.Timers.Timer 做同样的事情。请注意,它与 DispatcherTimer.

具有不同(但相似)的方法和属性
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        this.SizeChanged += MainWindow_SizeChanged;
        _resizeTimer.Elapsed += _resizeTimer_Elapsed;
    }

    private void MainWindow_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        _resizeTimer.Stop();
        _resizeTimer.Start();
    }

    System.Timers.Timer _resizeTimer = new System.Timers.Timer { Interval = 1500 };

    void _resizeTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        _resizeTimer.Stop();

        System.Diagnostics.Debug.WriteLine("SizeChanged end");
        //Do end of resize processing

        //you need to use BeginInvoke to access the UI elements
        //this.Dispatcher.BeginInvoke(...)
    }
}

有一件事更重要,System.Timers.Timer 运行在与 UI 线程不同的线程上,这意味着您不能直接从 UI 中操作 UI 元素=14=]方法。您需要使用 BeginInvoke 将调用编组回 UI 线程。

找出 System.Timers.TimerDispatcherTimer 之间的差异。关于这个主题有很多问题和答案。我只想向您展示如何使用 经典计时器