【发布时间】:2018-02-07 11:28:22
【问题描述】:
我遇到过好几次了。我的应用收到一些事件(例如WndProc)并且需要快速返回。需要运行的代码需要一些时间,并且不需要在从事件处理程序返回之前执行。
我目前的解决方案是在短时间内启动一个计时器,然后在 Tick 事件中运行该代码。
但是对于这种情况,这似乎是错误的工具,并且容易出现一些错误(例如多次运行代码)。
那么,有没有ExecuteWhenThisThreadIsIdle的方案?
编辑
C#/.NET 解决方案是最好的,但也欢迎使用特定于框架的解决方案。 主要是 Winforms。(还有 WPF、UWP、Xamarin.Forms 等)
代码需要与事件处理程序在同一线程上运行。 (通常是 UI 线程。)
【问题讨论】:
-
为什么不直接使用
Task.Run创建一个Task,一旦系统有可用资源,默认TaskScheduler(在另一个线程上)就会运行该Task? -
@CamiloTerevinto 因为代码需要在与事件处理程序相同的线程上运行。 (我想我会把它编辑成问题。)谢谢。我现在编辑了它。
-
在这种情况下,您需要添加相关的 UI 框架标签(WPF、WinForms、WebForms?)
-
解决方案很可能取决于所使用的框架。这个问题应该缩小范围。
-
问题是,AFAIK,不同框架之间的同步上下文以完全不同的方式工作(这是我从查看类的理解,不过,希望有更多的支持知识渊博的人),所以我不确定那里是否有可以跨平台工作的东西