は、だからあなたの最後のコメントにあなたはワークフローが完了する前に、コンソールアプリケーションの状態を取得したいと述べました。残念ながら、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
あなたは、私の答えを参照してください –