Прерывание работы проекта

Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
Опция: Выполнить BadEnd при прерывании проекта

65803

Проект

65804

Пример кода

1. Ручное прерывание (на кнопки интерфейса), не прерывают проект. Не отрабатывает опция "Выполнить BadEnd при прерывании проекта".
2. Метод ZennoPoster.InterruptTask("InterruptTask"); Не прерывают проект. Не отрабатывает опция "Выполнить BadEnd при прерывании проекта".

Вариант №1:
for(int i = 0; i <= 1000; i++)
{
    project.SendInfoToLog("Делаю какую-то работу...", true);
    Thread.Sleep(1000);

    if (i > 10)
    {
        project.SendInfoToLog("StopTask", true);
        ZennoPoster.StopTask("InterruptTask");
    }

    if (i > 15)
    {
        project.SendInfoToLog("InterruptTask", true);
        ZennoPoster.InterruptTask("InterruptTask");
    }

    if (i > 20) break;
}
Вариант №2:
//--------------------------------------------------------------------------------
// Свой код: Start
//--------------------------------------------------------------------------------
CommonCode.project = project;
Thread t = new Thread(CommonCode.ThreadProc);
t.Start();
Thread.Sleep(10000);
CommonCode.mre.Set();
project.SendInfoToLog("Главный поток ожидает окончания работы вторичного потока...");
t.Join();
Директивы using и Общий код:
//--------------------------------------------------------------------------------
// Общий код:
//--------------------------------------------------------------------------------
public class CommonCode
{
    public static ManualResetEvent mre = new ManualResetEvent(false);
    public static IZennoPosterProjectModel project;

    /// <summary>
    /// Lock this object to mark part of code for single thread execution
    /// </summary>
    public static object SyncObject = new object();

    // Insert your code here
    public static void ThreadProc()
    {
        string name = Thread.CurrentThread.Name;

        project.SendInfoToLog("Активизирован вторичный поток. Состояние: ожидает событие..."+ name, true);
        mre.WaitOne();

        project.SendInfoToLog("Вторичный поток продолжил выполнение..."+ name, true);
        Thread.Sleep(10000);
        project.SendInfoToLog("Вторичный поток закончил выполнение..."+ name, true);
    }
}
Вопрос
Как эта штука работает? Что не так делаю? Как правильно прервать, чтобы вышло на BadEnd?

Предложение
Если аналогичный вопрос, стоит заглянуть в тему.
 

Вложения

Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
исключение надо генерировать и выходить на красную. тогда и будет выходить на BADEND
C#:
// выход по внешнему требованию
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) throw new Exception("Внешнее прерывание");
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode)  throw new Exception("Внешнее прерывание");
 
  • Спасибо
Реакции: Маломальский
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
исключение надо генерировать и выходить на красную. тогда и будет выходить на BADEND
C#:
// выход по внешнему требованию
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) throw new Exception("Внешнее прерывание");
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode)  throw new Exception("Внешнее прерывание");
Это есть в проекте, если посмотреть в BadEnd.
Но суть, это внешнее прерывание (без доп. кода, что вы описали), которое у меня не получается запустить корректно с выводом в BadEnd.

UP
Не отрабатывает BadEnd при прерывание (с доп. кодом).

Вообще не прерывает работу (без доп. кода)
https://i.imgur.com/U5raNKs.gif
 
Последнее редактирование:

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
Это есть в проекте, если посмотреть в BadEnd.
Но суть, это внешнее прерывание (без доп. кода, что вы описали), которое у меня не получается запустить корректно с выводом в BadEnd.

UP
Не отрабатывает BadEnd при прерывание.
не увидел в коде, где идет опрос внешнего прерывания. этот код надо вставлять внутрь каждого цикла.
Не совсем понятна постановка задачи. Вы хотите прервать программу и выйти на BADEND. но у вас всего один кубик. В то время как прерывание в зенно идет между кубиками. И что бы увидеть метку внешнего прерывания внутри кубика или общего кода, надо эти метки опрашивать самостоятельно. Зенно может принудительно прервать кубик c# только в ПМ.
 
  • Спасибо
Реакции: Маломальский
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
не увидел в коде, где идет опрос внешнего прерывания. этот код надо вставлять внутрь каждого цикла.
Не совсем понятна постановка задачи. Вы хотите прервать программу и выйти на BADEND. но у вас всего один кубик. В то время как прерывание в зенно идет между кубиками. И что бы увидеть метку внешнего прерывания внутри кубика или общего кода, надо эти метки опрашивать самостоятельно. Зенно может принудительно прервать кубик c# только в ПМ.
прерывание в зенно идет между кубиками

Благодарю, вот это и прояснило вопрос, так как делается заготовка на коленке, без внедрения в полноценный проект. Поэтому и не понял, почему не могу сделать корректную отработку.
 
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
65812

код в BadEnd

65813

Хочу контролировать момент прерывания, чтобы отрабатывать логику на это событие. Не подскажешь?

65814

Сам себя остановил по условию, должно быть событие IsInterrupted == True, но в BadEnd это пропускается.
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
вот этот код напишите между паузой и логом "Делаю какую-то работу... "
C#:
// выход по внешнему требованию
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) throw new Exception("Внешнее прерывание");
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode)  throw new Exception("Внешнее прерывание");
он прервет цикл и сделает выход по красной из кубика. После BEDEND уже нет смысла опрашивать эти метки.
 
  • Спасибо
Реакции: AtlanticsSurfer

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113
Регистрация
05.06.2019
Сообщения
570
Благодарностей
453
Баллы
63
вот этот код напишите между паузой и логом "Делаю какую-то работу... "
C#:
// выход по внешнему требованию
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) throw new Exception("Внешнее прерывание");
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode)  throw new Exception("Внешнее прерывание");
он прервет цикл и сделает выход по красной из кубика. После BEDEND уже нет смысла опрашивать эти метки.
У меня как раз есть смысл, чтобы понимать, как окончательно заканчивать)
А параллельный поток, как пример, я не мог понять, почему вообще не работает логика прерывания, создал несколько условий. Но все оказалось иначе) нужно лишь пройти между действиями.
 

Салим

Client
Регистрация
04.10.2020
Сообщения
43
Благодарностей
9
Баллы
8
У меня как раз есть смысл, чтобы понимать, как окончательно заканчивать)
А параллельный поток, как пример, я не мог понять, почему вообще не работает логика прерывания, создал несколько условий. Но все оказалось иначе) нужно лишь пройти между действиями.
можете написать мне в личку?
 

Zoloo

Client
Регистрация
19.06.2020
Сообщения
122
Благодарностей
10
Баллы
18
как сделать, чтобы при определенном значении переменной,
выполнение проекта завершалось?
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 690
Баллы
113

Zoloo

Client
Регистрация
19.06.2020
Сообщения
122
Благодарностей
10
Баллы
18
Последнее редактирование:

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