2

GUI を更新する必要があるワーカー スレッドを持つ Windows アプリケーションがあります。BeginInvoke を使用して非同期で実行します。以下の例で示されている私たちの問題は、プリンシパルが GUI スレッドに伝播されることです。これは避けたいことです。実際のアプリケーションでは、間違った ID のために失敗するサーバー要求を実行します。この伝播を回避する方法はありますか?

  private Thread _thread;

  public Form1()
  {
     InitializeComponent();

     Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("MainUser"), new[] { "User" });

     _thread = new Thread(ThreadProc);
     _thread.Start(this);
  }

  private void ThreadProc(object parameter)
  {
     Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("ThreadUser"), new[] { "User" });

     var form = parameter as Form1;

     while (true)
     {
        form.BeginInvoke(new Action(() => ShowIdentity()));
        Thread.Sleep(4000);
     }
  }

  private void ShowIdentity()
  {
     lblIdentity.Text = Thread.CurrentPrincipal.Identity.Name;
  }
4

2 に答える 2