我有一個文本框用結合:WPF圖形用戶界面沒有更新,雖然主線程運行
<TextBox Text="{Binding TestString, UpdateSourceTrigger=PropertyChanged}" />
這裏將TestString實現:
private string testString;
public string TestString
{
get { return testString; }
set
{
if (testString != value)
{
testString = value;
PropChanged(); // INotifyPropertyChanged Implementation ..
System.Threading.Thread.Sleep(100);
}
}
}
將TestString屬性的set方法需要幾毫秒(例如,您可以用100ms的睡眠時間進行測試),然後如果按住一個字母鍵,則首先用兩個字母看到編輯的更新,然後GUI會一直停止更新/刷新字母鍵。如果密鑰被釋放,gui會繼續更新。我知道長時間運行的動作我應該使用異步編程機制,但令人討厭的是,我不完全知道當WPF開始不再更新時的閾值是多少。 我個人不希望爲持續5或10或100ms的短操作實現異步開銷,因爲UI仍然足夠響應(如果WPF會更新...)。
有誰知道爲什麼會發生這種情況,或者我可以如何解決這個問題而不使用異步編程?
在Borland VCL中(我猜在WinForms中),這根本不是問題,因爲GUI在每個關鍵事件之後都會更新。
順便說一句,如果您使用滑塊,那麼比鼠標鍵有更多的UI mousemove事件,並且如果使用滑塊更新GUI,WPF也沒有問題,即使ui線程中的操作持續很長時間(唯一的一點是ui反應更慢)。
請TestString'財產 – StepUp