|
1
28
在非UI线程中,我们不能接触到UI——可能会发生非常糟糕的事情,因为控件具有线程关联性。因此,从非UI线程,我们必须(至少)调用
但是,对于UI线程,我们
不要
想打电话
实际上,在大多数线程代码中,
知道
您希望在
不
-UI线程,因此在这些情况下,没有额外的开销:只需调用
|
|
|
2
3
|
|
|
3
1
问题是,GUI控件要求只有在用于实例化GUI控件的同一线程上执行的代码才能访问GUI控件。此要求背后的原因与Windows的架构方式有关。可以说,要改变这一点非常困难。 invokeRequired根据实例化线程的标识检查当前执行线程的标识。如果它们相同,代码可以与控件自由交互。否则,代码必须将数据从当前线程封送到实例化线程。这是一个缓慢而昂贵的过程,如果可能的话,应该尽量避免。如果您总是调用代码,那么您的代码就可以工作,而且您可能不会注意到性能受到影响,但是随着多核系统的使用,这种情况将越来越普遍。最好不要创建必须稍后撤消的代码“结”。 |
|
|
4
1
如果在创建窗口句柄之前尝试调用(例如,在调用窗体构造函数时),您将得到
见 MSDN 详情。 |
|
|
5
0
我能想到的一个原因是表演。 如果大多数时候调用线程与创建线程相同,那么您将有一些不必要的开销。 |
|
|
6
0
调用将通过委托来调用代码,而不是直接调用,这将是昂贵的。 只有在需要时才调用invoke,这是一种成本效益。因此,invokeRequired用于确定调用是来自同一线程还是来自另一线程? |
|
|
A B · C#Excel自动调整列避免长文本时出错 9 月前 |
|
|
Megrez7 · C#ToArray转换合并为一行,导致数组元素更改 9 月前 |
|
Aycon · 在工厂方法中释放部分创建的对象的正确方法是什么? 9 月前 |
|
|
Duck0 · 这个对象在更高的帧率下会更快吗,因为它在Update()中? 10 月前 |
|
|
Sei · Avalonia/WPF将路由器传递到控制模板 10 月前 |