我正在开发一个使用 CSLA 框架和自定义身份验证的 Winforms 应用程序(即中间层/服务器管理身份验证),并且正在实施会话超时功能。
我遇到的问题是校长的一个奇怪问题。当我在会话超时后登录时,我创建了一个新的 Principal 对象(我自己的自定义 Principal 对象)。这被分配给当前线程,它始终是 UI 线程(我已经检查过并且正在使用 Control.Invoke 来确保登录表单在 UI 线程上运行,并且此表单的点击事件在 UI 线程上运行) .
但是,在此之后,当我单击 UI 中的按钮时,我可以看到委托人已恢复为旧委托人。
主 UI 线程是否有任何理由或条件能够恢复到以前的 Principal?
在主 UI 线程上的主体周围是否有任何已知的陷阱可以避免?
我已经检查过了,我没有在其他任何地方设置 Thread.CurrentPrincipal。
更新
我通过更改为 aWindows.Forms.Timer
来触发我的会话超时解决了这个问题,而不是以前我使用 aSystem.Timers.Timer
然后Control.Invoke
在需要的地方使用。当我更改此设置时,我在 UI 线程上设置的 Principal 仍然存在,下次在 UI 线程上执行某些操作时。
谁能解释一下?因此,从本质上讲,在 UI 线程上设置 Principal 似乎意味着两种不同的事情......在设置它时是否需要确定某种上下文?
我发现其他几个人似乎有同样的问题......
http://permalink.gmane.org/gmane.comp.windows.devel.dotnet.advanced/14046 https://groups.google.com/forum/#!topic/microsoft.public.dotnet.languages.csharp/_hLhcDB3jHA