我需要在BackgroundWorker完成后更新我的Canvas。当我通过按钮actionlistener更新Canvas时,它工作得很完美。但是当我在backroundWorker完成时调用我的更新功能时。 gui不会更新。
将项目添加到画布的功能:
public void AddItemsToCanvas()
{
int factor = 0;
cvList.Children.Clear();
foreach (ItemControl item in ItemControl.ItemsList)
{
cvList.Children.Add(item.updateName);
Canvas.SetLeft(item.updateName, 13);
Canvas.SetTop(item.updateName, factor + 10);
Canvas.SetZIndex(item.updateName, 1);
cvList.Children.Add(item.imageButton);
Canvas.SetLeft(item.imageButton, 180);
Canvas.SetTop(item.imageButton, factor + 13);
Canvas.SetZIndex(item.imageButton, 5);}}
调用更新功能的按钮:
private void Button_Click_1(object sender, RoutedEventArgs e)
{
updateCanvas();
}
public void updateCanvas()
{
Service serv = new Service();
serv.SuperlinkCompartments();
//Check for updates and add them to a List of updates
Update up = new Update();
up.PropertyChanged += new PropertyChangedEventHandler(Items_PropertyChanged);
up.ShowUpdates();
}
public void Items_PropertyChanged(object sender, PropertyChangedEventArgs e)
{
AddItemsToCanvas();
}
从按钮actionListener调用时,Canvas会完美更新。但是当从BackgroundWorker事件调用UpdateCanvas()时不起作用。
public void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
var item = dic3[(BackgroundWorker)sender];
int index = (int)item.controlButton.Tag;
item.Progressbar.Value = 0;
SystemInfo.SystemList[Update.UpdateList[index].SystemIndex].Version = Update.UpdateList[index].UpdateVersion;
lvSystems.ItemsSource = SystemInfo.SystemList;
updateCanvas();
}
我在BackgroundWorker事件函数中遗漏了什么?
答案 0 :(得分:0)
尝试使用`Dispatcher':
Application.Current.Dispatcher.Invoke(new Action(()=>
{
updateCanvas();
}), DispatcherPriority.Render);
然后,在updateCanvas()
方法中,在最后添加以下内容:
cvList.UpdateLayout();