从workflow向host传送数据

2. 从workflow向host传送数据的流程如下:
      首先我的目的是在workflow运行到某一阶段的时候触发一个事件,在winform的textbox2上显示一条文本。这需要向workflow传送一个该form的handle,有2种方式传送该handle:
     一是将此handle 封装在符合ExternalDataEventArgs要求的类中,也就是DataFormWin类,这比较简单也比较直观,就不说了
     二是在workflow中定义一个IntPtr类型的属性,在初始化workflow的时候传入
        public static DependencyProperty HandleProperty = System.Workflow.ComponentModel.DependencyProperty.Register("Handle", typeof(IntPtr), typeof(Workflow1));
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        public IntPtr Handle
        {
            get
            {
                return ((IntPtr)(base.GetValue(Workflow1.HandleProperty)));
            }
            set
            {
                base.SetValue(Workflow1.HandleProperty, value);
            }
        }//workflow中的属性代码,so麻烦,懒得看,照着用就是了
在初始化的时候
Dictionary<string, object> parameters = new Dictionary<string, object>();
parameters.Add("Handle", this.Handle);//建立参数,将handle 传入workflow
workflowInstance = workflowRuntime.CreateWorkflow(typeof(WorkflowLibrary1.Workflow1),parameters);//初始化
workflowInstance.Start();
之后在vs的workflow设计界面handleExternalEventActivity的sender属性上选择Handle就ok了。
数据传入后,以下的处理都差不多
首先,定义delegate:public delegate void textBoxuseEventHandler(IntPtr Handle);
其次,在workflow类中初始化:public static textBoxuseEventHandler newText;
再次,在Runit中触发newText(((DataFromWin)e).Handle);
在host端订阅WorkflowLibrary1.Workflow1.newText = TextShow;
 public void TextShow(IntPtr handle)
        {
            Form1 form = (Form1)(Form1.FromHandle(handle));
            if (form != null) form.MessageReceive("12133dsfdsf");
        }
       public void MessageReceive( string message)
        {
           
if (this.InvokeRequired)
            {
                MessageDisplayDelegate messageDisplay = new MessageDisplayDelegate(this.MessageReceive);
                this.Invoke(messageDisplay, message);
            }
            else
            {
                this.textBox2.Text += message;
            }
        }
特别注意黑体的代码,如果没有这行,则会出现cross-thread访问异常。 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值