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

  • Автор темы Автор темы infosimple
  • Дата начала Дата начала

infosimple

Client
Регистрация
01.01.2015
Сообщения
466
Реакции
63
Баллы
28
Как остановить работу C#? включается действие на C# и проверка времени, по истечению заданного времени кубик останавливается, а действия C# продолжают работать, как бы остановить действия на C#
Действие mousmove, как остановить его?
 
C# экшен не прерывается, пока не выполнится полностью
 
  • Спасибо
Реакции: GREXA
Я использую такой код который подарил @darkdiver
C#:
Развернуть Свернуть Копировать
if (!Global.Variables.IsDebugMode) break;
Работает так - вставляем его в цикле, далее по кнопке "прервать" код выйдет из текущего цикла и пойдёт далее, можно там воткнуть например "return 0;". Код работает только в PM.
 
C# экшен не прерывается, пока не выполнится полностью
Предложенный CSS вариант - это, конечно, хорошо, но работает только в цикле. А если, например, стоит пауза +100500, то бяда. Сталкивался с подобным.
Но, в стандартных экшенах прерывание той же паузы как-то реализовано. Может (как предложение для функционала PM) можно добавить какую-то кнопку "Прервать принудительно" по правому клику на C# экшене.
 
корректно это сделать практически невозможно, даже частично это очень много гемора.
поэтому не будет.
 
  • Спасибо
Реакции: Dimionix
Вот вариант, как остановить работу C# кода в ZP.
Код:
Развернуть Свернуть Копировать
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) break;
 
Вот вариант, как остановить работу C# кода в ZP.
Код:
Развернуть Свернуть Копировать
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) break;
а этот код можно в любом месте кода поставить или? Можно немножко пояснений, на c# уже не новичек скорее где то уровень средний, поэтому говорите как занете не нужно разжевывать ничего
 
Вот вариант, как остановить работу C# кода в ZP.
Код:
Развернуть Свернуть Копировать
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) break;
В новых версиях работает?
 
В новых версиях работает?
у меня не работает
Использую такой код, работает везде:
C#:
Развернуть Свернуть Копировать
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return null; // Прерывание в ZP
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return null; // Прерывание в PM
 
Использую такой код, работает везде:
C#:
Развернуть Свернуть Копировать
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return null; // Прерывание в ZP
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return null; // Прерывание в PM
спасибо большое!
 
Использую такой код, работает везде:
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; и дальше код не отрабатывается
Что-то я не так делаю, или не понимаю, чего надо ждать от кода? Какова его функция всё же?
 
Как это должно работать?
Если первая строка стоит в коде, то в ПМ выдаётся ошибка и работать не желает
Если поставить вторую строку, доходит до неё и прерывается по return null; и дальше код не отрабатывается
Что-то я не так делаю, или не понимаю, чего надо ждать от кода? Какова его функция всё же?
1ый код для остановки кода в зенопостере... если ты будешь его вставлять в код и будешь дебажить своего бота то тогда ты его просто комментируешь и все и продолжаешь работать, ну а когда ты зафиналиваешь проект, то просто раскоментируешь этот код и тогда можно отсанавливать работу кода кнопкой прервать в зенопостере или зенобоксе...
2ой код для проджект мейкера специально, если например без точки останова работаешь то можешь просто вставить этот код куда нужно и когда нажмешь кнопку стоп как только выполнение добереться до этого кода то выполнение остановиться...
Очень удобен 1ый код в том случае когда у клиента код не тормозит, когда он нажимает на кнопку останова и очень удобно в том плане когда весь твой бот заклчен в 1 кубик а не в кучу...
Потестируй, если что пиши, код супер помогает!
 
  • Спасибо
Реакции: sdsfwehbn
С 1-м понятно, работает
2ой код для проджект мейкера специально, если например без точки останова работаешь то можешь просто вставить этот код куда нужно и когда нажмешь кнопку стоп как только выполнение добереться до этого кода то выполнение остановиться...
Второй не работает, сразу выдаёт ошибку, вылетает из ПМ, как только код доходит до этой точки
 
С 1-м понятно, работает

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

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("Такая закупка уже есть");
        }
}
 
Если значение в списке и в переменной одинаковое, то мне нужно чтобы шаблон выдал сообщение и закончил работу, а если нет то продолжил. Как написать окончание работы шаблона в коде?
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
А как-нибудь можно запихнуть этот кусок кода в самое начало экшена и чтобы он фоново ждал нажатия кнопки прекращения работы?
Код:
Развернуть Свернуть Копировать
if(((ZennoLab.InterfacesLibrary.ProjectModel.Collections.IContextExt)project.Context).IsInterrupted) return null; // Прерывание в ZP
if(Global.Variables.IsProjectMaker && !Global.Variables.IsDebugMode) return null; // Прерывание в PM
Ну, т.е. так-то он отрабатывает нормально, но только в том случае, если исполнение кода дошло до этих строк. А если в экшене много текста, то не особо хочется ставить массу таких строк проверки прерывания исполнения проекта... Гораздо будет удобнее где-то в начале указать это в ожидании прерывания пользователем пока сам код продолжает выполняться. Есть ли у Вас идеи как это реализовать?
 
Ну, т.е. так-то он отрабатывает нормально, но только в том случае, если исполнение кода дошло до этих строк. А если в экшене много текста, то не особо хочется ставить массу таких строк проверки прерывания исполнения проекта... Гораздо будет удобнее где-то в начале указать это в ожидании прерывания пользователем пока сам код продолжает выполняться. Есть ли у Вас идеи как это реализовать?
запихнуть в параллельные процессы? В одном в цикле проверяется нажатие, в другом - основной код.
 
Попробовал из параллельного потока abort'ить основной, в ЗП потоки с базами завершаются, но потом ничего не запустить.
В ПМ при abort'е основного потока, начинает спамить окном "debug thread error" и остаётся только закрыть ПМ.
 
  • Спасибо
Реакции: Karamzin
А почему не использовать что-то похожее на:
Код:
Развернуть Свернуть Копировать
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);
....


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

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