【发布时间】:2016-02-29 08:58:40
【问题描述】:
我有一个带有 ListBox 的 WPF 窗口,它绑定到 public ObservableCollection<String>,正在由另一个线程 (BackGroudWorker) 更新。
<ListBox Name="ListBox"
ItemsSource="{Binding MyCollection}"
... />
在同一个窗口中,我有一个带有点击处理程序的Button:
<Button Content="Close"
Click="Button_LogWindow_closeButton_Click"
... />
当我在更新 ListBox 时单击按钮时,通常不会调用此处理程序。虽然当后台线程完成并且ListBox 不再更新时它可以正常工作。
在我看来,按钮单击事件在调用它的处理程序之前已从队列中删除。我说的对吗?
你知道如何解决这个问题吗?
【问题讨论】:
-
Click 事件不会被移除,而是会在 ListBox 更新后排队执行。如果你做对了,就不会有按钮事件块,这可能是你的线程代码有问题(与 UI 线程同步)。
-
不幸的是,处理程序要么被立即调用(似乎只在
ListBox更新之间工作),要么从未被调用。 BackGroundWorker 正在写信给public ObservableCollection。 -
问题在于您的 C# 代码,而不是 XAML。如果您有兴趣修复它,请尽可能详细地发布您的 C# 代码。
标签: c# wpf multithreading listbox backgroundworker