Как остановить работу C#

infosimple

Client
Регистрация
01.01.2015
Сообщения
422
Благодарностей
61
Баллы
28
Как остановить работу C#? включается действие на C# и проверка времени, по истечению заданного времени кубик останавливается, а действия C# продолжают работать, как бы остановить действия на C#
Действие mousmove, как остановить его?
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
C# экшен не прерывается, пока не выполнится полностью
 
  • Спасибо
Реакции: GREXA

CSS

Client
Регистрация
22.05.2010
Сообщения
1 327
Благодарностей
663
Баллы
113
Я использую такой код который подарил @darkdiver
C#:
if (!Global.Variables.IsDebugMode) break;
Работает так - вставляем его в цикле, далее по кнопке "прервать" код выйдет из текущего цикла и пойдёт далее, можно там воткнуть например "return 0;". Код работает только в PM.
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
C# экшен не прерывается, пока не выполнится полностью
Предложенный CSS вариант - это, конечно, хорошо, но работает только в цикле. А если, например, стоит пауза +100500, то бяда. Сталкивался с подобным.
Но, в стандартных экшенах прерывание той же паузы как-то реализовано. Может (как предложение для функционала PM) можно добавить какую-то кнопку "Прервать принудительно" по правому клику на C# экшене.
 

rostonix

Известная личность
Регистрация
23.12.2011
Сообщения
29 067
Благодарностей
5 707
Баллы
113
корректно это сделать практически невозможно, даже частично это очень много гемора.
поэтому не будет.
 
  • Спасибо
Реакции: Dimionix

gigavat

Super Moderator
Регистрация
17.11.2011
Сообщения
112
Благодарностей
88
Баллы
28
Вот вариант, как остановить работу C# кода в ZP.
Код:
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) break;
 

socrobotic

Client
Регистрация
14.02.2016
Сообщения
203
Благодарностей
86
Баллы
28
Вот вариант, как остановить работу C# кода в ZP.
Код:
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) break;
а этот код можно в любом месте кода поставить или? Можно немножко пояснений, на c# уже не новичек скорее где то уровень средний, поэтому говорите как занете не нужно разжевывать ничего
 

biohan

Client
Регистрация
09.04.2013
Сообщения
51
Благодарностей
19
Баллы
8

socrobotic

Client
Регистрация
14.02.2016
Сообщения
203
Благодарностей
86
Баллы
28

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Благодарностей
3 543
Баллы
113
В новых версиях работает?
у меня не работает
Использую такой код, работает везде:
C#:
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return null; // Прерывание в ZP
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return null; // Прерывание в PM
 

socrobotic

Client
Регистрация
14.02.2016
Сообщения
203
Благодарностей
86
Баллы
28
Использую такой код, работает везде:
C#:
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return null; // Прерывание в ZP
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return null; // Прерывание в PM
спасибо большое!
 

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
Использую такой код, работает везде:
C#:
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return null; // Прерывание в ZP
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return null; // Прерывание в PM
Как это должно работать?
Если первая строка стоит в коде, то в ПМ выдаётся ошибка и работать не желает
Если поставить вторую строку, доходит до неё и прерывается по return null; и дальше код не отрабатывается
Что-то я не так делаю, или не понимаю, чего надо ждать от кода? Какова его функция всё же?
 

socrobotic

Client
Регистрация
14.02.2016
Сообщения
203
Благодарностей
86
Баллы
28
Как это должно работать?
Если первая строка стоит в коде, то в ПМ выдаётся ошибка и работать не желает
Если поставить вторую строку, доходит до неё и прерывается по return null; и дальше код не отрабатывается
Что-то я не так делаю, или не понимаю, чего надо ждать от кода? Какова его функция всё же?
1ый код для остановки кода в зенопостере... если ты будешь его вставлять в код и будешь дебажить своего бота то тогда ты его просто комментируешь и все и продолжаешь работать, ну а когда ты зафиналиваешь проект, то просто раскоментируешь этот код и тогда можно отсанавливать работу кода кнопкой прервать в зенопостере или зенобоксе...
2ой код для проджект мейкера специально, если например без точки останова работаешь то можешь просто вставить этот код куда нужно и когда нажмешь кнопку стоп как только выполнение добереться до этого кода то выполнение остановиться...
Очень удобен 1ый код в том случае когда у клиента код не тормозит, когда он нажимает на кнопку останова и очень удобно в том плане когда весь твой бот заклчен в 1 кубик а не в кучу...
Потестируй, если что пиши, код супер помогает!
 
  • Спасибо
Реакции: sdsfwehbn

Valiksim

Client
Регистрация
14.04.2012
Сообщения
1 344
Благодарностей
298
Баллы
83
С 1-м понятно, работает
2ой код для проджект мейкера специально, если например без точки останова работаешь то можешь просто вставить этот код куда нужно и когда нажмешь кнопку стоп как только выполнение добереться до этого кода то выполнение остановиться...
Второй не работает, сразу выдаёт ошибку, вылетает из ПМ, как только код доходит до этой точки
 

takerz

Client
Регистрация
02.07.2016
Сообщения
179
Благодарностей
23
Баллы
18
С 1-м понятно, работает

Второй не работает, сразу выдаёт ошибку, вылетает из ПМ, как только код доходит до этой точки
Обнови зенку. В последней все отлично работает
 
  • Спасибо
Реакции: Valiksim

Spinner

Client
Регистрация
05.03.2018
Сообщения
12
Благодарностей
1
Баллы
3
Подскажите плиз. у меня есть такой код, который сверяет список с переменной. Если значение в списке и в переменной одинаковое, то мне нужно чтобы шаблон выдал сообщение и закончил работу, а если нет то продолжил. Как написать окончание работы шаблона в коде?

HTML:
var textContains = project.Variables["zagolovok"].Value;
var sourceList = project.Lists["zagolovok"];
lock(SyncObjects.ListSyncer)
   
{
    for(int i=0; i<sourceList.Count; i++)
    {
        string s = project.TaskId;
        var str = sourceList[i];
    if (str.Contains(textContains))
    project.SendInfoToLog("Такая закупка уже есть");
        }
}
 

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 101
Баллы
113
Если значение в списке и в переменной одинаковое, то мне нужно чтобы шаблон выдал сообщение и закончил работу, а если нет то продолжил. Как написать окончание работы шаблона в коде?
C#:
IZennoList list = project.Lists["zagolovok"];
string str = project.Variables["zagolovok"].Value;
if (list.Any(s => s == str)) { // если хотя бы одна строка списка равна значению переменной
    project.SendInfoToLog("Такая закупка уже есть");
    throw new Exception(); // выход будет по красной стрелке (можно вывести на нейтральный кубик)
}
// если ни одна строка не равна - выход по зелёной
 
  • Спасибо
Реакции: Onizuka и Spinner

woober

Client
Регистрация
07.04.2015
Сообщения
211
Благодарностей
123
Баллы
43
А как-нибудь можно запихнуть этот кусок кода в самое начало экшена и чтобы он фоново ждал нажатия кнопки прекращения работы?
Код:
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return null; // Прерывание в ZP
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return null; // Прерывание в PM
Ну, т.е. так-то он отрабатывает нормально, но только в том случае, если исполнение кода дошло до этих строк. А если в экшене много текста, то не особо хочется ставить массу таких строк проверки прерывания исполнения проекта... Гораздо будет удобнее где-то в начале указать это в ожидании прерывания пользователем пока сам код продолжает выполняться. Есть ли у Вас идеи как это реализовать?
 

Karamzin

Client
Регистрация
24.05.2016
Сообщения
214
Благодарностей
431
Баллы
63
Ну, т.е. так-то он отрабатывает нормально, но только в том случае, если исполнение кода дошло до этих строк. А если в экшене много текста, то не особо хочется ставить массу таких строк проверки прерывания исполнения проекта... Гораздо будет удобнее где-то в начале указать это в ожидании прерывания пользователем пока сам код продолжает выполняться. Есть ли у Вас идеи как это реализовать?
запихнуть в параллельные процессы? В одном в цикле проверяется нажатие, в другом - основной код.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 607
Благодарностей
4 599
Баллы
113

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 373
Благодарностей
3 297
Баллы
113
Попробовал из параллельного потока abort'ить основной, в ЗП потоки с базами завершаются, но потом ничего не запустить.
В ПМ при abort'е основного потока, начинает спамить окном "debug thread error" и остаётся только закрыть ПМ.
 
  • Спасибо
Реакции: Karamzin

sanyo

Client
Регистрация
29.06.2014
Сообщения
111
Благодарностей
47
Баллы
28
А почему не использовать что-то похожее на:
Код:
namespace ZennoLab.OwnCode
{
   /// <summary>
   /// A simple class of the common code
   /// </summary>
   public class CommonCode
   {
     public static IZennoPosterProjectModel project;
     public static void BreakCodeBlockOnDemand()
     {
       if (Global.Variables.IsProjectMaker)
       {
         if(!Global.Variables.IsDebugMode) throw new Exception("Stopped in ProjectMaker"); //return null; // Прерывание в PM
       }
       else
       {
         if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) throw new Exception("Stopped in ZennoPoster"); // return null; // Прерывание в ZP
       }
     }
И потом в кубике:
Код:
CommonCode.project=project;

...

HRefs.ForEach(
   HRef => {
     CommonCode.BreakCodeBlockOnDemand();
     project.SendInfoToLog(HRef);
....

Еще не тестировал, просто идея для удобства. Для многопотока наверно надо немного доделать.
 
Последнее редактирование:

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