![]() |
1
18
创建任何窗口的线程应该 总是 创建单线程公寓。STA为任何非线程安全的COM对象提供线程保证。很少有。COM基础结构确保始终从正确的线程调用此类对象的方法,并在必要时封送调用。与Control.Begin/Invoke()非常相似,但在没有任何编码的情况下自动完成。 许多Windows设备都依赖于这一保证。值得注意的是,没有剪贴板、拖放和shell对话框(如OpenFileDialog)将无法正常工作。还有很多ActiveX控件,WebBrowser是Winforms项目中常用的控件。使UI线程成为MTA线程会导致难以诊断的故障,死锁是常见的故障。或者当组件的.NET包装器重复检查它是在STA上创建的时出现快速异常。 |
![]() |
2
7
不能在WinForms中使用MTA,因为大多数windows控件都无法工作,因为它们与MTA不兼容。因此,除非应用程序的代码调用STA COM对象,否则请始终使用MTA。例如,在ASP.NET中,MTA是默认模型。 |
![]() |
user107586 · 如何处理等待句柄不会导致无限循环? 6 月前 |
![]() |
ron burgundy · 获取-释放语义是否跨线程传递?[副本] 6 月前 |
![]() |
BenjiFB · C#内存缓存:在一次操作中追加到列表? 6 月前 |
![]() |
András Takács · Python多线程问题 10 月前 |
|
András Takács · Python多线程错误 10 月前 |