我不是(故意)在我的C#应用程序中使用线程。实际上我的主要方法有[STAThread]
,我认为这意味着我只使用一个帖子。
为什么然后,我会收到此错误消息吗?
跨线程操作无效:控制'messageLog'从其创建的线程以外的线程访问。
答案 0 :(得分:6)
有几种类型可以导致代码在不同的线程上运行,而无需显式调用System.Threading
。特别是FileSystemWatcher
和BackgroundWorker
会浮现在脑海中。你使用这些类型中的任何一种吗?
同样STAThread
决不会限制进程生成线程的能力。它改为设置初始应用程序线程的COM单元类型。
答案 1 :(得分:2)
使用main
标记[STAThread]
方法并不意味着您无法生成其他线程。
您实际上并未提供有关触发代码的内容的任何信息,因此我不能更具体,但是每次执行异步代码时都会在另一个线程上执行。在委托上执行BeginInvoke
之类的事情(或者,对于这个问题,大多数以Begin
开头的方法 - 当然,如果它们返回IAsyncResult
- 是异步方法)将执行另一个线程上的代码(和回调)。
如果您可以提供有关您情况的更多详细信息,我可以尝试提供更具体的建议。
答案 2 :(得分:0)
[STAThread]
并不表示您的应用程序是单线程的。它仅表示应用程序将使用线程,允许其他线程在特定线程等待耗时的操作完成时执行。
至于为什么抛出交叉线程异常,需要更多的上下文。 messageLog是什么类型的控件?什么代码访问此控件?您是否正在使用隐式使用线程的任何其他控件(例如BackgroundWorker
)?