Простое приложение, использующее Windows Workflow и winforms НЕ консоль

Я ищу простое стартовое приложение, которое позволяет вам ввести значение 1 - 10, это значение передается правилу WF, которое оценивает, если оно больше, меньше или равно 5 и возвращает результаты в приложение Windows Form. который отображает результаты в метке.

Я могу найти множество учебных пособий по консольным приложениям.net 3.5, но ничего, что бы показывало, как передать и получить результат обратно, используя формы Windows и.net 4!

это не обязательно должен быть приведенный выше пример, но он должен показать мне, как передать значение в правило, написать правило и прочитать результат из правила из приложения Windows Form в.net 4 C#.

Я потерялся!

Мой Базовый код теперь работает, если он помогает другим:

var workflow = new Activity1();

        IDictionary<string, object> inputs = new Dictionary<string, object>();
        inputs["firstname"] = textBox1.Text;
        IDictionary<string, object> outputs = WorkflowInvoker.Invoke(workflow, inputs);
        textBox2.Text= outputs["greeting"].ToString();

firstname - это аргумент с указанием направления в рабочем потоке. приветствие - это аргумент с указанием направления в рабочем процессе.

2 ответа

Решение

// посмотрите на эту ссылку для запуска указателей

Передача параметров в WorkFlow из приложения WinForms

Вот следующий подход, который я получил для достижения этой цели:
1) Создайте приложение Windows Forms под названием WindowsFormsApplication7, используйте последнюю платформу. Создайте приложение Windows Forms как обычно
2) Обязательно включите все ссылки


3) Добавьте класс со следующим кодом.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using System.IO;
using System.Timers;
using System.Reflection;
using System.Activities;
using System.Activities.Statements;


namespace WindowsFormsApplication7
{
    public class UpdateLabel : CodeActivity
    {

        Action y;      

        public InArgument<Label> lbl { get; set; }
        public InArgument<string> text { get; set; }


        protected override void Execute(CodeActivityContext context)
        {
            ((Label)context.GetValue(lbl)).Invoke(y = () => ((Label)context.GetValue(lbl)).Text = context.GetValue(text).ToString());
        }

    }

}


4) Дважды щелкните в форме и замените код на этот. Не обращайте внимания на ошибки. Они исчезнут.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;
using System.IO;
using System.Timers;
using System.Reflection;
using System.Activities;
using System.Activities.Statements;

namespace WindowsFormsApplication7
{


    public partial class Form1 : Form
    {
        Action y;
        WorkflowApplication HomeCycleWFApp = null;
        AutoResetEvent HomeEvent = null;
        Dictionary<string, object> inArgs = new Dictionary<string, object>();


        public Form1()
        {
            InitializeComponent();           
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            label1.Text = "";           
        }

        private void button1_Click(object sender, EventArgs e)
        {
            RunHomeCycle(label1, textBox1.Text);
        }       


        public void RunHomeCycle(Label lbl, string txt)
        {
            button1.Enabled = false;
            if (!inArgs.ContainsKey("lbl"))
            {
                inArgs.Add("lbl", lbl);
            }
            if (!inArgs.ContainsKey("txt"))
            {
                inArgs.Add("txt", txt);
            }
            else
            {
                inArgs["txt"] = txt;
            }

            HomeEvent = new AutoResetEvent(false);

            HomeCycleWFApp = new WorkflowApplication(new Activity1(), inArgs);


            HomeCycleWFApp.Completed = delegate (WorkflowApplicationCompletedEventArgs e)
            {
                button1.Invoke(y = () => button1.Enabled = true);
                HomeEvent.Set();


            };
            HomeCycleWFApp.Run();
        }

    }
}


5) Добавьте следующие элементы управления в форму
label1, textbox1 и button1


6) Добавьте действие рабочего процесса под названием Activity1.xaml


7) Скомпилируйте решение (F6). Активность UpdateLabel, как описано в Class1 (открытый класс UpdateLabel: CodeActivity), должна присутствовать в панели инструментов

8) Из панели инструментов перетащите действия UpdateLabel и WriteLine в Activity1


9) Добавьте следующие аргументы lbl (Label) и txt (string) в Activity1


10) Нажмите один раз в действии UpdateLabel, нажмите F4 (Свойства) и обновите параметры действия, как показано


11) Нажмите F5, чтобы скомпилировать и запустить приложение. Вставьте текст в текстовое поле и нажмите кнопку. Текст должен отображаться в метке, обновляться действием Activity1, а в окне вывода обновляться действием WriteLine.

12) Поздравляю!!!

Другие вопросы по тегам