使用另一个Interop的自定义活动

时间:2014-04-23 13:54:13

标签: c# .net xaml workflow-foundation-4 workflow-foundation

短版

我想在另一个活动中使用活动,我找到的唯一解决方案是使用Interop Activity。但现在我的Workflow Fundation 4.5 Interop遇到了一些问题。

长版

我的项目是在C#.NET 4.5中。
我的第一个活动是在两个双打之间进行简单的添加。我用xaml设计工具做了这个 我的第二个活动就是使用Interop Activity调用第一个活动。

这是我的ViewModel:MyMain.cs:

public class MyMain : INotifyPropertyChanged
    {
        private double a, b, c, d, e, f, g;
    public double A
    {
        get { return a; }
        set
        {
            if (a == value) return;
            a = value;
            OnPropertyChanged("A");
        }
    }

    public double B
    {
        get { return b; }
        set
        {
            if (b == value) return;
            b = value;
            OnPropertyChanged("B");
        }
    }


    public double G
    {
        get { return g; }
        set
        {
            if (g == value) return;
            g = value;
            OnPropertyChanged("G");
        }
    }

    public void Do()
    {
        Activity act = testing();
        Dictionary<string, object> ins = new Dictionary<string, object>();
        ins.Add("A", A);
        ins.Add("B", B);
        var output = WorkflowInvoker.Invoke(act, ins);
        MessageBox.Show(output["G"].ToString());

    }
    public DynamicActivity testing()
    {

        A = 5.3;
        B = 2.1;


        // Define the Input and Output arguments that the DynamicActivity binds to
        var aa = new InArgument<double>(A);
        var bb = new InArgument<double>(B);
        var gg = new OutArgument<double>();
        return new DynamicActivity()
        {
            Properties = 
            {
                new DynamicActivityProperty() {Name = "AA", Type = typeof (InArgument<double>), Value = aa},
                new DynamicActivityProperty() {Name = "BB", Type = typeof (InArgument<double>), Value = bb},

                new DynamicActivityProperty() {Name = "GG", Type = typeof (OutArgument<double>), Value = gg}
            },
            Implementation = () =>
                new Sequence
                {
                  Activities =
                  {
                      new Interop()
                      {
                          ActivityType = typeof(Adds),
                          ActivityProperties =
                          {
                              {"A", new InArgument<double>(env => aa.Get(env))},
                              {"B", new InArgument<double>(env => bb.Get(env))},
                              {"C", new OutArgument<double>(env => gg.Get(env))}
                          }
                      }
                  }
                }
        };
    }
    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propName)
    {
        if (PropertyChanged != null)
        {
            MessageBox.Show(propName);
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }
    #endregion
}

我的xaml:MainWindow.xaml:

<Window x:Class="ActWpf.MainWindow"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Label Content="Resultat" HorizontalAlignment="Left" Height="26" Margin="34,78,0,0" VerticalAlignment="Top" Width="102"/>
        <Button Content="Button" HorizontalAlignment="Left" Height="26" Margin="367,78,0,0" VerticalAlignment="Top" Width="88" Click="Calculate"/>
        <Label Content="Label" HorizontalAlignment="Left" Height="26" Margin="160,78,0,0" VerticalAlignment="Top" Width="148"/>

    </Grid>
</Window>

我收到了警告,但我没有找到任何解决方法:

System.Activities.Statements.Interop is obsolete: The WF3 Types are deprecated. Instead, please use the new WF4 Types from System.Activities.*

我的执行错误(我翻译错误,因为通常是法语):

DynamicActivity': The private implementation of the activity
'1: DynamicActivity' gives the follow validation error : Invalid value specify for the property 'ActivityType' of the Interop Activity 'Interop'.
 The value of this property have to be System.Type which herite ofSystem.Workflow.ComponentModel.Activity.

这里是法语,如果这可以帮助:

'DynamicActivity': L'implémentation privée de l'activité '1: DynamicActivity' présente l'erreur de validation suivante :   Valeur incorrecte spécifiée pour la propriété 'ActivityType' de l'activité Interop 'Interop'.

La valeur decettepropriétédoitêtreunSystem.TypequiéritedeSystem.Workflow.ComponentModel.Activity。

1 个答案:

答案 0 :(得分:0)

我解决了我的问题。 通常,如果您的活动运作良好,您可以在xaml workflow中的Toolbox中的指定div中找到它们。
指定div将添加项目/命名空间的foreach,您可以找到并且从这些命名空间中拖放您的活动。