Запустить Windows Form без остановки шаблона

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
790
Благодарностей
136
Баллы
43
Привет всем! Скажите пожалуйста, как запустить всплывающее окно Windows Form из шаблона зеннопостера, но так, чтобы выполнение в самом шаблоне при этом продолжалось? Это нужно, чтобы остановка шаблона происходила именно по нажатию кнопочки "Стоп" в самом окне Windows Form, а не через обычные кнопки в зеннопостере
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
Простой вариант (работать будет только в зенке):

Добавить в класс CommonCode общего кода:
C#:
public static object MessageLock = new object();
public static bool IsMessageShown {get; set;}
Сниппет:
C#:
lock(CommonCode.MessageLock){
    if(!CommonCode.IsMessageShown){
        CommonCode.IsMessageShown = true;
        System.Threading.Tasks.Task.Run(delegate()
        {
            var dialogResult = System.Windows.Forms.MessageBox.Show("Прервать?", project.Name, System.Windows.Forms.MessageBoxButtons.OKCancel, System.Windows.Forms.MessageBoxIcon.Asterisk);
            if(dialogResult == System.Windows.Forms.DialogResult.OK)
            {
                // ZennoPoster.StopTask(Guid.Parse(project.TaskId)); // остановить
                ZennoPoster.InterruptTask(Guid.Parse(project.TaskId)); // прервать
            }
            else
            {
                CommonCode.IsMessageShown = false;
            }
        });
    }
}
 

Вложения

  • 19,9 КБ Просмотры: 83
Последнее редактирование:

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
790
Благодарностей
136
Баллы
43
@Zymlex спасибо, клёвый сниппет! Только есть возможность не на "прервать" зеннопостеровское воздействовать, а элементарный return null в коде прописать, чтобы при клике "ОК" в окне выполнение таким образом прекращалось?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 518
Благодарностей
3 370
Баллы
113
элементарный return null в коде прописать, чтобы при клике "ОК" в окне выполнение таким образом прекращалось
Думал об этом, но так как метод выполняется асинхронно, то ошибку не получить (с некоторой оговоркой), пока не будет запрошен результат её работы,
т.е. это требует проверок по всему шабу.
 

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
790
Благодарностей
136
Баллы
43
Думал об этом, но так как метод выполняется асинхронно, то ошибку не получить (с некоторой оговоркой), пока не будет запрошен результат её работы,
т.е. это требует проверок по всему шабу.
А если исходить из того, что выполнение будет происходить в ракмах одного до диез (C#) экшена? И логику сделать примерно такую: создали окно, код пошёл дальше выполняться, но время от времени проходит снова тот участок, который создавал окно. Второй раз окно не создаём, тут понятно. Однако проверяем - если была нажата кнопка "ОК", то тогда делаем return null. А была ли она нажата - ну, допустим, в какую-нибудь переменную инфа от нажатия записалась, и значит проверяем, есть эта инфа в переменной или нет.
Вот такое создать возможно же?
 

avtostopshik

Client
Регистрация
09.09.2016
Сообщения
790
Благодарностей
136
Баллы
43
@Zymlex решил задачу по другому - основу то ты всё предоставил - спасибо тебе за это))
Вот только возник вопрос - окно второй раз почему-то не всплывает. Ты знаешь с чем это связано и как это предотвратить? Хочу чтобы было что-то вроде того, чтобы некоторые настройки шаблона на лету можно было изменять сколько угодно раз. То есть на форме несколько кнопок будет разных, а значит сигнал шаблону от окна может быть послан больше, чем один раз. Но пока что это не так. Подскажи пожалуйста, как исправить?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)