【发布时间】:2012-06-04 16:31:25
【问题描述】:
我的表单应用程序中有几个 System.Threading.Timers 带有更新 UI 的回调...成功 - 即没有抛出错误。
在我知道不应该在 UI 线程以外的任何线程上更新 UI 之前,我已经构建了这些。
现在我很困惑为什么当我在这些单独的 threading.timer 线程上更新 UI 时它不会引发跨线程异常?
我将更改这些回调,以便在 UI 线程上调用 UI 更新,但我很好奇为什么会这样。
编辑:我的应用程序是一个 WinForms 应用程序。
【问题讨论】:
-
你能给我们看一些代码吗?我不认为这项工作完全像你的答案那样靠运气。我从来没有看到它没有失败。
-
@gbianchi 这取决于正在更新的控件。在检查跨线程更新方面,一些控件比其他控件更好。通过某些控件,它“有时”可以工作。
-
您的可执行文件在发布模式下编译。 Microsoft 有意禁用对非调试代码的检查以保持向后兼容。因此,它会起作用,但可能会导致细微的错误或偶尔出现故障,具体取决于您的具体操作。
标签: c# winforms multithreading thread-safety