我们有一个带有需要更新 GUI 的工作线程的 Windows 应用程序。我们使用 BeginInvoke 异步执行此操作。我们的问题,在下面的示例中演示,是 Principal 被传播到我们想要避免的 GUI 线程,因为在我们的实际应用程序中,我们执行的服务器请求由于错误的身份而失败。它是一种避免这种传播的方法吗?
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;
}