我在 google/here 上看到很多关于从另一个线程更新 UI 元素的线程。
如果我只想获取复选框的值怎么办?
我可以做到这一点而不需要做任何特别的事情吗?
Edit: 看来我得收回之前写的东西了。尝试了以下方法:
添加了一个名为的文本框myTextBox
并尝试检索的值Text
财产:
Thread t = new Thread(
o =>
{
Thread.Sleep(2000);
string value = myTextBox.Text;
Thread.Sleep(2000);
});
t.Start();
并且应用程序(WPF)似乎在 2 秒后崩溃。使用调度程序的工作原理:
Thread t = new Thread(
o =>
{
Thread.Sleep(2000);
myTextBox.Dispatcher.BeginInvoke(
(Action)(() => { string value = myTextBox.Text; }));
Thread.Sleep(2000);
});
t.Start();
因此,在从 GUI 组件读取值时,您仍然需要通过调度程序线程,至少在 WPF 中是这样。
第二次编辑: 这样就好多了。显然,对经典 WinForms 重复实验表明,它可以读取Text
未使用的财产Invoke/BeginInvoke
。有趣的是,似乎设置属性也可以正常工作(无需调用),尽管我敢打赌它不是线程安全的,并且应用程序不会因某种原因抱怨。
底线:在任何情况下,在与其他线程的 GUI 组件交互时使用调度程序都是一个好主意,因为它可以确保读/写序列化到单个线程,这样就不会出现线程安全问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)