0

嗨,我有一个为我的网站创建的程序,我试图对其进行更新,以便代码的密集部分将在单独的线程中运行。新线程创建了几个服装控件,我需要将它们作为主 GUI 线程上的子控件放置在容器内,但每次运行代码时都会出现此错误“调用线程无法访问此对象,因为不同的线程拥有它”。抛出此错误后的调试器会突出显示 [ if (FileStack.Dispatcher.CheckAccess()) ] 下的代码部分,每次我运行代码并且程序尝试调用控件时。这是我的代码

 public delegate void ADDFiLEHandel(FileControlxaml File);


 public void ADDFiles(FileControlxaml File)
      {

          if (FileStack.Dispatcher.CheckAccess())
          {
              FileStack.Children.Add(File);  //this is the code that gets height-lighted by the debugger 
          }
          else
          {
                      FileStack.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, new ADDFiLEHandel(ADDFiles), File);

          }

然后我从新线程调用这样的调用,我必须将线程状态设置为 STA,我做错了什么我花了几个小时试图让它工作。

    public void createfilethread(object data)
    {
    FileControlxaml  NewFile = new FileControlxaml();
    NewFile.Title = "Hellow World";
    ADDFiles(NewFile);
    }
4

1 回答 1

1

你不可以做这个。当您DispatcherObject在没有关联的线程中实例化 s 时,Dispatcher会创建一个新的调度程序并将其关联到该线程。您不能混合在不同线程中创建的不同 UIElement。

为什么要在第二个线程中创建 UIElements?这就是“UI 线程”的意义所在。

重新考虑你的方法。

于 2012-11-14T19:37:45.293 回答