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.Timer
和 DispatcherTimer
之间的差异。关于这个主题有很多问题和答案。我只想向您展示如何使用 经典计时器。
我试图在 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.Timer
和 DispatcherTimer
之间的差异。关于这个主题有很多问题和答案。我只想向您展示如何使用 经典计时器。