Метод вызова в Workflow 4.0

#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 в окне вывода