我一直在到处寻找这个问题的答案,但似乎找不到令人满意的答案。也许这里有人能开导我。
我有一个BindingList<T>
的后代,它存储了对SynchronizationContext
对象的引用,以便在UI线程上引发其已更改的事件。
现在,也有可能这个BindingList<T>
是在UI线程而不是后台线程上创建和使用的。如果没有像InvokeRequired
这样的属性,我该如何检查呢?在UI线程上调用SynchronizationContext.Send
的结果是什么?
发布于 2011-03-29 07:47:56
SynchronizationContext
上的Send方法将同步执行,并调用SynchronizationContext
绑定到的线程上的委托。如果SynchronizationContext
绑定到UI线程,并且代码当前正在UI线程上执行,那么委托将直接被调用,而不需要在线程之间进行编组。
发布于 2014-01-08 23:53:10
send方法将在UI线程上同步执行,这是真的。然而,需要担心的一个可能的后果是,调用Send会增加调用堆栈。
因此,例如,下面的代码:
for (int i = 0; i < 10000000; i++) syncContext.Send(....);
将导致StackOverflow异常...这就是为什么如果您已经在所需的线程上运行,避免使用同步上下文可能是明智的。除了做一些内部记账之外,我不知道有什么完全可靠的方法来检查列表是在哪个线程上创建的。
https://stackoverflow.com/questions/5465736
复制相似问题