【发布时间】:2016-01-20 13:55:48
【问题描述】:
我有一个带绑定的文本框:
<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 方法需要几毫秒(例如,你可以用 100 毫秒的睡眠来测试它),然后如果你按住一个字母键,你首先会看到几个字母的编辑更新然后 GUI 在您按住字母键时停止更新/刷新。如果释放密钥,则 gui 会继续更新。
我知道对于长时间运行的操作,我应该使用异步编程机制,但令人讨厌的是,我不知道 WPF 开始不再更新时的阈值是多少。 我个人不想为持续 5 或 10 或 100 毫秒的短操作实现异步开销,因为 UI 仍然足够响应(如果 WPF 会更新......)。
有谁知道为什么会发生这种情况,或者我如何在不使用异步编程的情况下解决这个问题?
在 Borland VCL 中(我猜在 WinForms 中)这根本不是问题,因为 GUI 在每个关键事件之后都会更新。
顺便说一句,如果您使用滑块,则 UI 鼠标移动事件比按住键要多得多,并且如果您使用滑块,WPF 更新 GUI 没有问题,即使 ui 线程中的操作持续很长时间(唯一的问题是 ui 反应更慢)。
【问题讨论】:
-
请展示
TestString属性的实现
标签: c# wpf user-interface