最近,我试图从一个线程(而不是UI线程)访问一个文本框,但是抛出了一个异常。它说了一些关于“代码不是线程安全的”,所以我最终写了一个委托(来自MSDN的示例帮助)并调用它。
但即便如此,我也不太明白为什么所有额外的代码都是必要的。
更新:如果我检查是否会遇到任何严重的问题
Controls.CheckForIllegalCrossThread..blah =true
发布于 2010-01-09 23:48:56
在最简单的术语中,threadsafe意味着从多个线程访问它是安全的。当你在一个程序中使用多个线程,并且每个线程都试图访问一个公共的数据结构或内存中的位置时,可能会发生一些不好的事情。因此,您添加了一些额外的代码来防止这些不好的事情发生。例如,如果两个人同时编写同一文档,则要保存的第二个人将覆盖第一个人的工作。为了使其线程安全,您必须强制person 2等待person 1完成其任务,然后才允许person 2编辑文档。
发布于 2017-07-07 15:40:07
在现实世界中,外行的例子是
假设你有一个拥有互联网和手机银行的银行账户,而你的账户只有10美元。你使用手机银行将余额转移到另一个账户,同时,你使用相同的银行账户进行在线购物。如果此银行帐户不是threadsafe,则银行允许您同时执行两个事务,然后银行将破产。
Threadsafe意味着,如果同时有多个线程试图访问对象,则对象的状态不会改变。
发布于 2010-01-09 23:48:43
您显然是在WinForms环境中工作。WinForms控件表现出线程关联,这意味着在其中创建它们的线程是唯一可用于访问和更新它们的线程。这就是为什么你会在MSDN和其他地方找到示例,演示如何将调用编组回主线程。
通常的WinForms实践是拥有一个专门用于所有UI工作的线程。
https://stackoverflow.com/questions/2033879
复制相似问题