Jav*_*ram 18 .net c# multithreading
可能重复:
你能解释一下STA和MTA吗?
在C#windows窗体应用程序中.我在Main.c函数上面的Program.cs中看到了[STAThread].
所以我想知道何时使用STA或MTA线程?
怎么样,它会影响应用程序?
Han*_*ant 18
创建任何窗口的线程应始终创建单线程单元.STA为任何非线程安全的COM对象提供线程保证.很少是.COM基础结构确保始终从正确的线程调用此类对象的方法,并在必要时对调用进行编组.与Control.Begin/Invoke()非常相似,但在没有任何编码的情况下自动完成.
许多Windows设施都依赖于这种保证.值得注意的是,如果没有它,剪贴板,拖放和弹出对话框(如OpenFileDialog)将无法正常工作.还有很多ActiveX控件,WebBrowser是你在Winforms项目中常用的一个.使您的UI线程成为MTA线程导致难以诊断失败,死锁是常见的.或者当组件的.NET包装器仔细检查它是否在STA上创建时,快速异常.
您不能在WinForms中使用MTA,因为大多数Windows控件都无法正常工作,因为它们与MTA不兼容.因此,除非应用程序的代码调用STA COM对象,否则请始终使用MTA.例如,在ASP.NET中,MTA是默认模型.
| 归档时间: |
|
| 查看次数: |
19695 次 |
| 最近记录: |