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が関連付けられていないスレッドでをインスタンス化するDispatcherと、新しいディスパッチャーが作成され、そのスレッドに関連付けられます。異なるスレッドで作成された異なる UIElement を混在させることはできません。

2 番目のスレッドで UIElements を作成するのはなぜですか? それが「UIスレッド」の目的です。

アプローチを再考してください。

于 2012-11-14T19:37:45.293 に答える