我想在另一个活动中使用活动,我找到的唯一解决方案是使用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。
答案 0 :(得分:0)
我解决了我的问题。
通常,如果您的活动运作良好,您可以在xaml workflow
中的Toolbox
中的指定div中找到它们。
指定div将添加项目/命名空间的foreach,您可以找到并且从这些命名空间中拖放您的活动。