问题描述
|
这个问题已经在这里有了答案:
解决方法
抱歉,我对XAML不太了解,但是您可以尝试这种方法吗?
注意:我认为您不能在XAML中使用BackgroundWorker对象,但是可以在另一个类中使用它,并找到一种将数据传递到其中的方法。
这里的主要思想是将您的工作转移到另一个线程,并在该线程中进行填充。
...虽然,我必须说:如果您真的将所有项目都添加到一行中(如下面的修改示例所示),我怀疑是否会因此而引起任何闪烁。您的闪烁可能来自其他地方。数据源更改时是否触发任何事件处理程序?
void Button_Click(object sender,RoutedEventArgs e) {
using (BackgroundWorker worker = new BackgroundWorker()) {
var items = new int[10000];
worker.DoWork += delegate {
for (int i = 0; i < items.Length; i++)
items[i] = i + 1;
};
worker.RunWorkerCompleted += delegate {
listBox.ItemsSource = items;
};
worker.RunWorkerAsync();
}
}
,您是否尝试过双缓冲。