따라서 마지막 워크샵이 완료되기 전에 콘솔 응용 프로그램에서 상태를 가져오고 싶다고 말한 것입니다. 안타깝게도 In/Out 및 Out 인수는 워크 플로 완료시에만 사용할 수 있습니다. 그러나 워크 플로 변수 및 인수 이외의 다른 구문을 사용하여 호스트 프로세스와 통신하는 방법이 있습니다.
이렇게하는 방법 중 하나는 호스트 프로세스와 상호 작용하는 데 사용할 수있는 사용자 지정 확장 프로그램을 사용하는 것입니다. 확장은 모든 유형이 될 수 있으며 워크 플로우 및 호스트 프로세스에서 사용할 수 있습니다. 전체 예제 :
using System;
using System.Activities;
namespace WorkflowDemo
{
class Program
{
static void Main(string[] args)
{
var app = new WorkflowApplication(new MyCustomActivity());
var myExtension = new MyCommunicationExtension();
myExtension.MyValueChanged += (s, e) => Console.WriteLine(myExtension.MyValue);
app.Extensions.Add(myExtension);
app.Run();
Console.ReadKey();
}
}
public class MyCommunicationExtension
{
public string MyValue { get; private set; }
public event EventHandler<EventArgs> MyValueChanged;
public void OnMyValueChanged(string value)
{
MyValue = value;
MyValueChanged?.Invoke(this, EventArgs.Empty);
}
}
public class MyCustomActivity : CodeActivity
{
protected override void Execute(CodeActivityContext context)
{
var extensionObj = context.GetExtension<MyCommunicationExtension>();
if (extensionObj != null)
{
extensionObj.OnMyValueChanged("Hello World");
}
}
}
}
변수의 범위는 활동으로 지정됩니다. 인수를 사용하여 콘솔 응용 프로그램에서 값을 가져와야합니다. –
WorkflowApplication 인스턴스에는 InArgument을 포함하는 WorkflowDefinition 속성이 있습니다. InArgument에 의해 값을 얻으려면 context.GetValue()를 호출해야합니다. WorkflowApplication을 사용하는 콘솔 응용 프로그램에서 컨텍스트를 얻으려면 어떻게해야합니까? –
Porfus
당신이 필요하지 않습니다, 내 대답을 참조 –