评论会员:SAKryukov 时间:2012/02/06
都没有有效的选项
。
第一个是大禁忌。这使事情变得更糟,因为它可以掩盖一个现实问题。应用程序甚至可以运行多次成功后失败,问题的原因是很难找到,几乎是不可能的。
第二个是不是所有的选项。让我们来看看。
这仅仅是允许一个代码选择天气System.Windows.Forms.Control.Invoke或System.Windows.Forms.Control.BeginInvoke的谓词,所以真正的选择是使用调用,而不是InvokeRequired。你不能调用任何有关用户界面形式的非UI线程。你应该总是使用调用。
现在,什么InvokeRequired呢?它具有有限的需要。首先,它不会不管在哪个控件可以调用Invoke或BeginInvoke,它可以是实际上包含任何控制当前正在运行的用户界面有一些UI线程。这个谓词将总是返回true,如果你把它从任何其他线程,如果你把它在同一UI线程,将始终返回false。你知道,在大多数情况下,通过设计,无需调用InvokeRequired。只有当你有一些方法,有时可以从相同的用户界面线程,有时从一些其他线程(S)调用,这个调用可能需要
看到我过去的解决方案,在那里我详细解释这一切:
]
mdash;的SA
评论会员:lukeer 时间:2012/02/06
选项2只抑制一个警告。线程不断发生,可能发生的一切丑陋的东西。因此选项2实际上是不是一种选择。
所以还是首次。它是唯一一个你有:赖斯
评论会员:游客 时间:2012/02/06
|不知道的细节,只是小心使用后台线程改变UI,您可能一)混淆用户,如果用户改变的东西,然后更改其他的东西,一个按钮启用-这是为用户很难知道变化的影响按钮的启用状态B)如果用户改变的东西,然后改变别的东西,然后一个按钮被激活,他们一下就可以了,第二个变化可能会使有效的按钮了它可以变得非常混乱,很快开始
帕瓦尔Anuja多尔:即使我会建议为2选项1用于
"当控制创建线程以外的线程试图访问该控件的方法或属性之一,它往往会导致不可预知的结果。"
选项2你必须给予时间,但实际上将帮助你得到你所要求的