在什么条件下,当前线程的主体丢失。 我有一个Windows窗体应用程序,它使用主线程的主体,并通过WCF从服务器接收通知。在某些客户端,我为当前主题松开了Principal,我不明白为什么。 "失去"似乎来自代码:
foreach (EventHandler subscriber in onApplicationIdle.GetInvocationList())
{
subscriber.BeginInvoke(this, e, OnAsyncCompleted, subscriber);
}
答案 0 :(得分:4)
在.NET中创建新线程时,父线程的主体不会自动传播。如果你正在制作帖子,你必须自己这样做。
如果您正在使用async
我相信它在其创建的任何线程中都有自己的身份传播规则。
调用BeginInvoke
会将该方法放入ThreadPool中(我相信!),因此线程池主体适用于此处。我认为这意味着你必须自己做!
您可以让所有线程通过调用AppDomain.SetPrincipalPolicy自动设置主体,但这只涵盖PrincipalPolicy enum中的三种类型。
否则,您可以在线程代码中手动设置Thread.Current.Principal()。
请参阅wrong-thread-currentprincipal-in-async-wcf-end-method Stack溢出帖子进行类似的讨论。