#workflow #workflow-foundation #workflow-foundation-4
#рабочий процесс #рабочий процесс-основа #рабочий процесс-основа-4
Вопрос:
У нас есть приложение, в котором мы создаем действие (скажем, = CallA), это действие будет использоваться в проекте worklfow. Это действие (CallA) вызовет метод, который присутствует в другом классе (и другом пространстве имен). Я написал пример кода для вызываемого ниже метода :-
namespace WorkflowApplication1
{
class Class1
{
public int Trial(int a, int b)
{
return 23;
}
}
}
Мы хотим использовать функцию invokeMethod, предоставленную в toolbox, и не хотим использовать codeactivity.
Если кто-нибудь использовал эту функцию WF 4.0, пожалуйста, помогите.
Заранее спасибо.
Ответ №1:
В целевом типе вы должны указать на класс, который реализует метод.
В имени метода вам нужно будет написать имя. Если метод не является статическим, то вам нужно будет создать переменную этого типа класса, инициализировать ее заранее и использовать в свойстве targetObject. Вам понадобится переменная в вашем WF для сохранения результата (используя свойство Result для действия Invoke)
Надеюсь, это поможет
Комментарии:
1. Я знаю, что это произошло годы спустя, но в чем преимущество использования invokeMethod вместо простого Assign, который я нахожу более читаемым?
2. Вы могли бы сделать больше, чем просто назначить. Вот и все.
Ответ №2:
Здесь следует предложение по этому вопросу
1) Создайте приложение Windows Forms
2) Добавьте класс с именем Class 1 и измените пространство имен на WorkflowApplication1
3) Измените весь код с Class 1 на
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WorkflowApplication1
{
public class Class1
{
public int Trial(int a, int b)
{
return 23;
}
}
}
4) Добавьте действие с именем Activity1
5) Скомпилируйте решение
6) Откройте Activity1 и добавьте последовательность
7) Щелкните последовательность и создайте 2 переменные, как показано ниже
8) Вставьте метод вызова и действия строки записи, как показано ниже
9) Отредактируйте параметры метода Invoke, как показано ниже
10) Добавьте кнопку и дважды щелкните по ней, чтобы создать событие Click
11) Добавьте следующий фрагмент кода внутри вашего класса Form1 и измените событие button1_Click
namespace Generic
{
public partial class Form1 : Form
{
WorkflowApplication WFApp = null;
AutoResetEvent WFAppEvent = null;
public void RunWFApp()
{
WFAppEvent = new AutoResetEvent(false);
WFApp = new WorkflowApplication(new Activity1());
WFApp.Completed = delegate (WorkflowApplicationCompletedEventArgs e)
{
WFAppEvent.Set();
};
WFApp.Run();
}
private void button1_Click(object sender, EventArgs e)
{
RunWFApp();
}
...
...
}
}
12) Откройте окно вывода (Ctrl-Alt-O). Запустите приложение, нажмите кнопку и проверьте, отображается ли число 23 в окне вывода