我已经碰到过好几次了。我的应用会收到一些事件(例如WndProc
)并需要快速返回。需要运行的代码需要一些时间,并且在从事件处理程序返回之前需要执行 not 。
我目前的解决方案是在短时间内启动计时器,并在Tick事件中运行该代码。
但对于这种情况,这似乎是错误的工具,并且容易出现一些错误(例如,不止一次地运行代码)。
那么,有没有ExecuteWhenThisThreadIsIdle
计划?
修改
C#/。NET 解决方案是最好的,但也欢迎特定于框架的解决方案。 主要是Winforms。(还有WPF,UWP,Xamarin.Forms,......)
代码需要在与事件处理程序相同的线程上运行。 (通常是UI线程。)
答案 0 :(得分:2)
在WinForms中,您可以订阅Application.Idle
。
例如......
private bool _wndProcEventHooked = false;
protected override void WndProc(ref Message m) {
// Run your code here
}
private void Application_Idle(Object sender, EventArgs e) {
if (!this._wndProcEventHooked) {
// Hook your wndProc event here.
this._wndProcEventHooked = true;
}
}
答案 1 :(得分:1)
在WPF中can be done使用DispatcherTimer
:
var timer = new DispatcherTimer
(
TimeSpan.FromMinutes(10),
DispatcherPriority.ApplicationIdle,// Or DispatcherPriority.SystemIdle
(s, e) => MessageBox.Show("Timer"),
Application.Current.Dispatcher
);