1

我不确切知道如何解释它,但基本上这是我的问题可以重现的方式:

  • 在 VB.NET 中创建 WPF Windows 应用程序项目(不要创建,继续阅读,除非你不相信我......)
  • 单击 Window 的标题以创建 Window.Loaded 事件处理程序并导航到它。
  • 将以下内容添加到事件处理程序:
    My.User.CurrentPrincipal = New GenericPrincipal( _
    New GenericIdentity("username"), Nothing)
    Dim authenticated = My.User.CurrentPrincipal.IsAuthenticated
    MessageBox.Show(authenticated) 'True'
  • 返回到窗口设计器并在 Window1 中添加一个 Button。
  • 单击 Button 以创建其 Click 事件处理程序并导航到它。
  • 向其中添加以下内容:
    Dim authenticated = My.User.CurrentPrincipal.IsAuthenticated
    MessageBox.Show(authenticated) 'False'
  • 运行应用程序,查看结果
  • 为什么现在它是假的!?!?

更新:我在http://connect.microsoft.com/WPF/feedback/ViewFeedback.aspx?FeedbackID=513731报告了一个错误,请投票或发布解决方法,并在您这样做时更新我,在此先感谢。

欢迎任何解决方法!

4

1 回答 1

1

我希望为这种行为找到一个明确的解释,但还没有这样的运气。不过,我确实认为我可以为您提供一种解决方法,即通过 AppDomain.SetThreadPrincipal(通常是 AppDomain.**CurrentDomain.**SetThreadPrincipal)分配自定义主体对象。

编辑:

原来有人在 MSDN 论坛上提出了这个问题。讨论线程记录了我已经引用的解决方法,以及对行为的解释。

于 2009-11-30T21:19:53.543 回答