我有一个文本框用结合: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