none
为何“状态机”的HandleExternalEvent事件无法触发? RRS feed

  • 问题

  • 大家好,我初学WF,创建了状态机一个WorkFlow,宿主是一个控制台程序,代码如下:

    namespace WorkFlowStateConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                using (WorkflowRuntime runtime = new WorkflowRuntime())
                {
                    AutoResetEvent flag = new AutoResetEvent(false);
                    WorkflowInstance instance = runtime.CreateWorkflow(typeof(CSharpStateWorkFlow.ShoppingWorkState));
                    ActivityInterface impl = new InterfaceImpl();
                    ExternalDataExchangeService ec = new ExternalDataExchangeService();
                    runtime.AddService(ec);
                    ec.AddService(impl);
                    runtime.StartRuntime();
                    instance.Start();
                    flag.WaitOne();
                }
            }
        }
    }

    接口和实现类定义如下:

    接口:

    namespace CSharpStateWorkFlow.ActivityInterfaces
    {
        [ExternalDataExchange]
        public interface ActivityInterface
        {
             event EventHandler<ExternalDataEventArgs> OnMenuShow;
             void MenuShow();
        }
    }

    实现类:

    namespace CSharpStateWorkFlow.ImpleActivityInterfaces
    {
        public class InterfaceImpl:ActivityInterfaces.ActivityInterface
        {
            public event EventHandler<System.Workflow.Activities.ExternalDataEventArgs> OnMenuShow;
            public void MenuShow()
            {
                if (OnMenuShow != null)
                {
                    OnMenuShow(nullnull);
                }
            }
        }
    }

    ChooseItemEvent包含一个handleExternalEventAcivity对象,其中这样绑定:

    结果控制台只运行“请输入钱”,我输入了1000,回车结果什么也没有了……。

    为何自定义的事件代码(在控制台程序中)不触发了呢?谢谢!


    帮助一起改进论坛质量?提交你的意见于此。
    我的博客园
    慈善点击,点击此处
    和谐拯救危机,全集下载,净化人心

    2013年1月28日 10:58

答案

  • Hi,

    我注意到在你的InterfaceImpl实现里,OnMenuShow事件是需要ShowMenu方法来触发的。并且在工作流定义中,进入到Shopping State之后,工作流会等待外部事件触发。

    但是没有看到任何地方去调用ShowMenu或者用其他形式来触发OnMenuShow,那么工作流就会卡在Shopping State的第一步。


    My blog: http://coding.windstyle.cn

    2013年7月9日 7:05
    版主

全部回复