无法从其他线程将子项添加到 WrapPanel

本文关键字:添加 WrapPanel 其他 线程 | 更新日期: 2023-09-27 18:36:38

我是线程任务的新手,所以很明显为什么我不能做我正在做的事情。我不明白为什么我可以更改线程中WrapPanelWidth,但我无法向其添加子项。这是我的代码:

private void Grid_Loaded(object sender, RoutedEventArgs e)
{
     Thread t = new Thread(LoadIcons);
     t.SetApartmentState(ApartmentState.STA);
     t.Start();
}
private void LoadIcons()
{ 
     Foreach(icon present in directory)
     {
        Icon icon = new Icon { Width = 16, Height = 16};
        Dispatcher.Invoke(new Action(() => pnlIcons.Width = 50)); //Will let me
        Dispatcher.Invoke(new Action(() => pnlIcons.Children.Add(icon))); // Won't
     }
}

无法从其他线程将子项添加到 WrapPanel

你必须重写你的代码。将图标放在调度程序内以避免异常。

private void Grid_Loaded(object sender, RoutedEventArgs e)
{
    Thread t = new Thread(LoadIcons);
    t.SetApartmentState(ApartmentState.STA);
    t.Start();
}
private void LoadIcons()
{ 
    Dispatcher.Invoke(new Action(() => 
    {
        foreach(Icon present in directory)
        { 
            present.Width = 16;
            present.Height = 16;
            pnlIcons.Width = 50;
            pnlIcons.Children.Add(present);
        }
    }));
}  

希望对您有所帮助。