Dot-Net

如何從 WPF 中的另一個執行緒讀取 textbox.Text 值?

  • May 16, 2018

在我的 WPF 表單中,我有一個文本框。

當計時器經過時,需要獲取文本框的內容。

經過的計時器在與 UI 不同的執行緒中工作。

這個問題有點雙重:

  • 從 GUI 執行緒跨執行緒讀取值的最簡單、最易讀的方法是什麼(我發現了幾個,它們看起來太冗長了,不應該是真正基本的東西)?
  • 我不能以非阻塞方式閱讀文本嗎?在這種情況下,我不關心執行緒安全。

–EDIT–

我使用了 Dispatcher,但是呼叫了比John更詳細的呼叫:

originalTextBox.Dispatcher.Invoke(
   DispatcherPriority.Normal, 
   (ThreadStart) delegate{text=originalTextBox.Text;}
);

不介意更簡潔。訪問文本屬性應該是非常基本的。

Oisin 是對的,您需要查看Dispatcher。像這樣的東西應該​​可以工作,並且不太冗長:

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

您可以:

  • 使用Dispatcher來安排消息從後台執行緒在 UI 執行緒上執行。A DispatcherPriorityofSend將為您提供最快的響應。
  • 使用 aDispatcherTimer在 UI 執行緒上定期執行消息。
  • 使用OneWayToSource綁定將Text屬性連接到背景組件上的屬性。這樣,您就不必做任何工作來獲取屬性值 - 它已經提供給您的組件。

引用自:https://stackoverflow.com/questions/710034