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;
}