【发布时间】:2011-03-28 22:20:46
【问题描述】:
我一直在寻找这个问题的答案,但似乎找不到满意的答案。也许这里有人可以启发我。
我有一个 BindingList<T> 的后代,它存储对 SynchronizationContext 对象的引用,以便在 UI 线程上引发其更改的事件。
现在,这个BindingList<T> 也有可能是在 UI 线程而不是后台线程上创建和使用的。如果没有像 InvokeRequired 这样的属性可供我使用,我该如何检查?在 UI 线程上调用SynchronizationContext.Send 会有什么后果?
【问题讨论】:
-
你最好检查一下。在工作线程上创建绑定列表时,SynchronizationContext.Current 将为空。 Send() 否则立即在 UI 线程上执行。
-
我将 SynchronizationContext 传递给列表,因为它已绑定到 UI。当我引发 ListChanged 事件时,我会在使用前检查是否有 SynchronizationContext。
标签: c# winforms multithreading invokerequired synchronizationcontext