gpt4 book ai didi

c# - Windows 工作流和 Thread.CurrentPrincipal

转载 作者:太空狗 更新时间:2023-10-30 00:57:18 26 4
gpt4 key购买 nike

我遇到 Thread.CurrentPrincipal 没有从主线程传播到工作流应用程序的问题。

有什么办法吗?

这是我的示例应用程序:

class Program
{
static void Main(string[] args)
{
Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity("Bob", "Passport"), new string[] { "managers", "executives" });

System.Console.WriteLine("MainThread Prinicipal type: " + Thread.CurrentPrincipal.GetType().ToString());
System.Console.WriteLine("MainThread Prinicipal Identity: " + Thread.CurrentPrincipal.Identity.Name);
System.Console.WriteLine();

AutoResetEvent syncEvent = new AutoResetEvent(false);

WorkflowApplication application = new WorkflowApplication(new Workflow1());

application.Completed = delegate(WorkflowApplicationCompletedEventArgs e)
{
syncEvent.Set();
};

application.Run();
syncEvent.WaitOne();
}
}

和工作流程

<Activity mc:Ignorable="sap" x:Class="WorkflowConsoleApplication1.Workflow1" sap:VirtualizedContainerService.HintSize="273,427" mva:VisualBasic.Settings="Assembly references and imported namespaces for internal implementation" xmlns="http://schemas.microsoft.com/netfx/2009/xaml/activities" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:mv="clr-namespace:Microsoft.VisualBasic;assembly=System" xmlns:mva="clr-namespace:Microsoft.VisualBasic.Activities;assembly=System.Activities" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:s1="clr-namespace:System;assembly=System" xmlns:s2="clr-namespace:System;assembly=System.Xml" xmlns:s3="clr-namespace:System;assembly=System.Core" xmlns:s4="clr-namespace:System;assembly=System.ServiceModel" xmlns:sad="clr-namespace:System.Activities.Debugger;assembly=System.Activities" xmlns:sap="http://schemas.microsoft.com/netfx/2009/xaml/activities/presentation" xmlns:scg="clr-namespace:System.Collections.Generic;assembly=System" xmlns:scg1="clr-namespace:System.Collections.Generic;assembly=System.ServiceModel" xmlns:scg2="clr-namespace:System.Collections.Generic;assembly=System.Core" xmlns:scg3="clr-namespace:System.Collections.Generic;assembly=mscorlib" xmlns:sd="clr-namespace:System.Data;assembly=System.Data" xmlns:sl="clr-namespace:System.Linq;assembly=System.Core" xmlns:st="clr-namespace:System.Threading;assembly=System.Core" xmlns:st1="clr-namespace:System.Threading;assembly=System" xmlns:st2="clr-namespace:System.Text;assembly=mscorlib" xmlns:st3="clr-namespace:System.Threading;assembly=mscorlib" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Sequence sad:XamlDebuggerXmlReader.FileName="C:\projects\WorkflowConsoleApplication1\WorkflowConsoleApplication1\Workflow1.xaml" sap:VirtualizedContainerService.HintSize="233,387">
<WriteLine sap:VirtualizedContainerService.HintSize="211,61" Text="[&quot;WorkflowThread Prinicipal type: &quot; + System.Threading.Thread.CurrentPrincipal.GetType().ToString()]" />
<WriteLine sap:VirtualizedContainerService.HintSize="211,61" Text="[&quot;WorkflowThread Prinicipal Identity: &quot; + System.Threading.Thread.CurrentPrincipal.Identity.Name]" />
<WriteLine sap:VirtualizedContainerService.HintSize="211,61" />
</Sequence>
</Activity>

上述程序的输出是:

MainThread Prinicipal type: System.Security.Principal.GenericPrincipal
MainThread Prinicipal Identity: Bob

WorkflowThread Prinicipal type: System.Security.Principal.GenericPrincipal
WorkflowThread Prinicipal Identity:

任何帮助将不胜感激。

谢谢

最佳答案

WorkflowApplication 使用其 SynchronizationContext 来安排实际工作。默认实现使用 ThreadPool as user7116 described .但是,您可以自由实现自己的 SynchronizationContext 并实现 Post() 操作来执行任何您想要的操作。

关于c# - Windows 工作流和 Thread.CurrentPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5598137/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com