Dot-Net
如何從 WPF 中的另一個執行緒讀取 textbox.Text 值?
在我的 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 執行緒上執行。ADispatcherPriorityofSend將為您提供最快的響應。- 使用 a
DispatcherTimer在 UI 執行緒上定期執行消息。- 使用
OneWayToSource綁定將Text屬性連接到背景組件上的屬性。這樣,您就不必做任何工作來獲取屬性值 - 它已經提供給您的組件。