【问题标题】:Writing "WriteLine" message to trace window in Windows Workflow 4.5在 Windows Workflow 4.5 中将“WriteLine”消息写入跟踪窗口
【发布时间】:2019-11-25 03:32:16
【问题描述】:

我正在使用 WF 4.5 的 rehosted-designer 为用户提供一个界面,以创建包含自定义活动和框架的一些内置活动的工作流。

我正在使用 AsyncCodeActivity 模型(完全符合我的要求),因此必然会执行如下工作流,我的意思是立即触发执行,而无法迭代工作流中的活动:

WorkflowApplication wf = new WorkflowApplication(activeFlowChart);
............
............
var result = wf.BeginRun(null,null);
while (!result.IsCompleted)
{
Thread.Sleep(1);
continue;
}
wf.EndRun(result);

我的工作流程可以有多个分散在工作流程中的“WriteLine”活动。 我想检索特定“WriteLine”的消息,并按照它在工作流中的显示顺序显示在跟踪窗口中。

我在完成时尝试如下,显示执行结束时附加的所有“WriteLine”消息:

wf.Extensions.Add(writer);
wf.Completed = arg =>
{
if (!string.IsNullOrEmpty(writer.ToString()))
{
//display
}
};

我正在寻找一种方法来在工作流中出现“WriteLine”消息时立即获取它,而不是在完成时。

【问题讨论】:

    标签: c#-4.0 workflow-foundation-4


    【解决方案1】:

    以下链接帮助我考虑编写自定义 TextWriter 来解决上述用例:

    Redirecting Console.WriteLine() to Textbox

    我没有将字符附加到“writer”对象并在工作流完成时将其打印到显示窗口(请参阅我的问题中的代码),而是编写了一个自定义 TextWriter 来打印每个“WriteLine”活动的消息当遇到新行(“\r\n”)时。下面的例子:

    在构造函数中:

    var writer = new WriteLineTextWriter(DisplayTraceMessage);
    Console.SetOut(writer);
    

    自定义文本编写器:

    public class WriteLineTextWriter : TextWriter
    {
    private Action<string, Brush> WriteTraceMessageToGUI { get; set; }
    private StringBuilder line;
    private byte counter;
    
    public WriteLineTextWriter(Action<string, Brush> action)
    {
    WriteTraceMessageToGUI = action;
    line = new StringBuilder();
    }
    
    public override System.Text.Encoding Encoding
    {
    get { return System.Text.Encoding.Unicode; }
    }
    
    public override void Write(char value)
    {
    if (value == '\r' || value == '\n')
    {
    counter++;
    }
    else
    {
    line.Append(value.ToString());
    }
    if (counter == 2)
    {
    WriteTraceMessageToGUI(line.ToString(), Brushes.BlueViolet);
    line.Clear();
    counter = 0;
    }
    }
    
    public override void Write(string value)
    {
    WriteTraceMessageToGUI(value, Brushes.BlueViolet);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      • 2016-03-31
      相关资源
      最近更新 更多