如何从另一个线程中删除子项?

时间:2017-02-05 22:05:51

标签: c# wpf multithreading parent-child

mycode:

        Canvas myCanvas = new Canvas();
>       Rectangle myRectangle = new Rectangle();

>                  Task.Factory.StartNew(() =>
>                  {
>                         while(true)
>                          {
>                             myCanvas.Children.Clear();
>                            //do something
>                            for(int i=1;i<=100;i++)
>                            {
>                               myCanvas.Children.Add(myRectangle[i]);
>                            }
                           }
>                  }).ContinueWith(t =>
>                  {
> 
>                  }, System.Threading.CancellationToken.None, TaskContinuationOptions.None,
>                  TaskScheduler.FromCurrentSynchronizationContext());

我仍然遇到错误:“指定的Visual已经是另一个Visual的子项或CompositionTarget的根。”我应该怎么做?

1 个答案:

答案 0 :(得分:1)

您可能希望使用 Dispatcher.Invoke 方法。

while (true)
{
     Dispatcher.Invoke(new Action(() => { myCanvas.Children.Clear(); }));
     for (int i = 1; i <= 100; i++)
     {
         Dispatcher.Invoke(new Action(() => { myCanvas.Children.Add(myRectangle[i]); }));
     }
}

请注意, Invoke 会阻止调用线程。