如何从WPF中的另一个线程读取textbox.Text值?

Bor*_*ens 10 .net wpf multithreading

在我的WPF表单中,我有一个文本框.
当计时器过去时,需要获取文本框的内容.
经过的计时器正在与UI不同的线程中工作.

问题有点双重:

  • 从GUI线程交叉线程中读取值的最简单,最可读的方法是什么(我发现了几个并且它们看起来太冗长了什么应该是真正基本的东西)?
  • 我不能以非阻塞的方式阅读文本吗?在这种情况下我不关心线程安全.

--EDIT--
我使用了Dispatcher,但是有一个更详细的调用,那么John有什么:

originalTextBox.Dispatcher.Invoke(
    DispatcherPriority.Normal, 
    (ThreadStart) delegate{text=originalTextBox.Text;}
);
Run Code Online (Sandbox Code Playgroud)

不过甚至不介意.访问文本属性应该是完全基本的.

Joh*_*zek 6

Oisin是对的,你需要看看Dispatcher.这样的事情应该有效,而且不是太冗长:

System.Windows.Application.Current.Dispatcher.Invoke(
DispatcherPriority.Normal,
(ThreadStart)delegate { text = MyTextBox.Text; });
Run Code Online (Sandbox Code Playgroud)


Ken*_*art 5

你可以:

  • 使用它Dispatcher来安排从后台线程在UI线程上执行的消息.一DispatcherPrioritySend,会得到最快的响应可能的.
  • 使用a DispatcherTimer在UI线程上定期执行消息.
  • 使用OneWayToSource绑定将Text属性连接到后台组件上的属性.这样,您就不必进行任何工作来获取属性值 - 它已经提供给您的组件.


Joh*_*uer 1

由于问题没有指定 C#,我想展示一个针对 VB.NET 的简单解决方案:

text = originalTextBox.Dispatcher.Invoke(Function() As String
    Return originalTextBox.Text
  End Function)
Run Code Online (Sandbox Code Playgroud)