Re[8]: полная_остановка_кода_С#
От: slavenin137  
Дата: 29.09.08 19:12
Оценка:
Здравствуйте, AngeL B., Вы писали:

AB>Здравствуйте, slavenin137, Вы писали:


S>>if (имя_формы.DialogResult == DialogResult.Cancel)

S>>{
S>> // остановить код!!!!! срочно!!!
S>>}

AB>Можно все таки более пространно о том, что значит "останосить код!!!"?

AB>Какой код надо остановить?
AB>На сколько его надо остановить?
AB>Остановить(приостановить) или прервать(завершить)?
AB>Код находится в текущем потоке или в другом?

хм...
1 — отсановить код главной формы.
2 — надо завершить операцию.
3 — да код находиться в текущем потоке
Re[8]: полная_остановка_кода_С#
От: slavenin137  
Дата: 29.09.08 19:16
Оценка:
Здравствуйте, stump, Вы писали:

S>Здравствуйте, slavenin137, Вы писали:


S>>>>запустил форму — в ней происходит выполнения кода после нажатия кнопки. при определенных обстоятельствах выскакивает вторая форма с двумя кнопками ок и отмена. если нажал ок — то все пошло дальше — если нажал отмена — то главная форма остается открытой и бездействует, а вспомогательная формочка закрывается.


S>>я пытаюсь максимально подробно описать — извините если пудрю мозги))

S>>дело в том что вспомогательная форма вызывается в цикле из главной формы — так как сделать так что бы при:
S>>if (имя_формы.DialogResult == DialogResult.Cancel)
S>>{
S>> // остановить код!!!!! срочно!!!
S>>}
S>>такого метода — ShowModal я не нашел в с#...

S>Судя по постановке вопроса, вы не в курсе того что такое message loop.

S>В вашем коде достаточно поставить return и ваша форма будет "бездействовать". Т.е. она не будет выполнять никакого кода, написанного вами, и в тоже время не будет "виснуть намертво".
S>
S>if (имя_формы.DialogResult == DialogResult.Cancel)
S>{
S>    // остановить код!!!!! срочно!!!
S>      return;
S>}
S>

S>
нет ретурн не подходит...
процесс происходит в функции которая возвращает List<...>
Re[8]: полная_остановка_кода_С#
От: slavenin137  
Дата: 29.09.08 19:17
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, slavenin137, Вы писали:


S>>такого метода — ShowModal я не нашел в с#...


S>Form.ShowDialog();

S>Оно?

интересно как ShowDialog остановит код после нажатия кнопочки отмена у дочерней формы...
Re[10]: полная_остановка_кода_С#
От: slavenin137  
Дата: 29.09.08 19:19
Оценка:
Здравствуйте, AngeL B., Вы писали:

AB>Здравствуйте, slavenin137, Вы писали:


S>>мужики))) я конечно начинающий пользователь — но не до такой же степени)))

S>>как сделать так чтобы форма бездействовала после нажатия отметы?

AB>ты хочешь сказать, что у тебя форма _сама_по_себе_ что-то делает после нажатия отмены?


Да! она продолжает выполнять вычисления — которые надо немедленно остановить.
Re[9]: полная_остановка_кода_С#
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.09.08 19:21
Оценка:
Здравствуйте, slavenin137, Вы писали:

S>интересно как ShowDialog остановит код после нажатия кнопочки отмена у дочерней формы...


Иронизируете? 3-я страница, а несколько человек, которые в дотнете не первый год, не могут понять, что вы хотите?!?!?
Re[11]: полная_остановка_кода_С#
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.09.08 19:22
Оценка:
Здравствуйте, slavenin137, Вы писали:

S>Здравствуйте, AngeL B., Вы писали:


AB>>ты хочешь сказать, что у тебя форма _сама_по_себе_ что-то делает после нажатия отмены?


S>Да! она продолжает выполнять вычисления — которые надо немедленно остановить.


Может быть BackgroundWorker задействован?
Re[9]: полная_остановка_кода_С#
От: AngeL B. Россия  
Дата: 29.09.08 19:25
Оценка:
Здравствуйте, slavenin137, Вы писали:

S>нет ретурн не подходит...

S>процесс происходит в функции которая возвращает List<...>

Ага, понятно. Надо откатить стек вызовов до определенного места и вернуться в message loop.
Тогда try/catch там где начало кода и throw где его надо прервать. Желательно сделать специальный тип исключения для ентого.

А вообще такой подход к реализации у меня считается плохой алгоритмической конструкцией. В данном случае почти однозначно можно рефакторить код так, чтобы все работало через обычные if. мое мнение.
Re[9]: полная_остановка_кода_С#
От: AngeL B. Россия  
Дата: 29.09.08 19:30
Оценка:
Здравствуйте, slavenin137, Вы писали:

S>нет ретурн не подходит...

S>процесс происходит в функции которая возвращает List<...>

return null;


что тоже не подходит?
Re[9]: полная_остановка_кода_С#
От: stump http://stump-workshop.blogspot.com/
Дата: 29.09.08 19:31
Оценка:
Здравствуйте, slavenin137, Вы писали:


S>>Судя по постановке вопроса, вы не в курсе того что такое message loop.

S>>В вашем коде достаточно поставить return и ваша форма будет "бездействовать". Т.е. она не будет выполнять никакого кода, написанного вами, и в тоже время не будет "виснуть намертво".
S>>
S>>if (имя_формы.DialogResult == DialogResult.Cancel)
S>>{
S>>    // остановить код!!!!! срочно!!!
S>>      return;
S>>}
S>>

S>>
S>нет ретурн не подходит...
S>процесс происходит в функции которая возвращает List<...>
Ну так и возвращай то что успел накидасть в свой лист.
Но я полагаю, что ты хочешь приостановить формирование своего листа, а потом "по кнопочке" продолжить черное дело. Так?
Тогда тебе надо много мануалов читать. Например про BackgroundWorker. И промногопоточное программирование вообще.
В твоем случае формировать лист надо было в отдельном потоке, а окошки выбрасывать в главном потоке, синхронизируя при этом оба потока при помощи сообщений и примитивов синхронизации, например ManualResetEvent. Если все это слишком сложно, попробуй BackgroundWorker.
Понедельник начинается в субботу
Re[10]: полная_остановка_кода_С#
От: stump http://stump-workshop.blogspot.com/
Дата: 29.09.08 19:34
Оценка:
Здравствуйте, AngeL B., Вы писали:

AB>Здравствуйте, slavenin137, Вы писали:


S>>нет ретурн не подходит...

S>>процесс происходит в функции которая возвращает List<...>

AB>
AB>return null; 
AB>


AB>что тоже не подходит?

offtop: Плохой стиль. возвращать null для коллекций. FxCop ругаться будет
Понедельник начинается в субботу
Re[10]: полная_остановка_кода_С#
От: slavenin137  
Дата: 29.09.08 19:35
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, slavenin137, Вы писали:


S>>интересно как ShowDialog остановит код после нажатия кнопочки отмена у дочерней формы...


S>Иронизируете? 3-я страница, а несколько человек, которые в дотнете не первый год, не могут понять, что вы хотите?!?!?

я приношу извинения за свои неясные объяснения... но ShowDialog все равно не в тему)))
Re[11]: полная_остановка_кода_С#
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.09.08 19:38
Оценка: :)
Здравствуйте, slavenin137, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>>Иронизируете? 3-я страница, а несколько человек, которые в дотнете не первый год, не могут понять, что вы хотите?!?!?

S>я приношу извинения за свои неясные объяснения... но ShowDialog все равно не в тему)))

Что-то мне подсказывает, что мы со своими догадками далеки от того что происходит в той форме. Во всяком случае, кусок кода все здорово бы прояснил. (поздновато уже, телепаты отдыхают).
Re[11]: полная_остановка_кода_С#
От: AngeL B. Россия  
Дата: 29.09.08 19:38
Оценка:
Здравствуйте, stump, Вы писали:

S>offtop: Плохой стиль. возвращать null для коллекций. FxCop ругаться будет


это уже не суть. пусть будет return new List<...>().
Re: полная_остановка_кода_С#
От: slavenin137  
Дата: 29.09.08 19:40
Оценка:
спасибо всем за помощь — и за то что выслушивали мои бредни...
извиняюсь за неясность своих мыслей в объснении задачи.
Re: полная_остановка_кода_С#
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 29.09.08 21:25
Оценка: 1 (1)
Здравствуйте, slavenin137, Вы писали:

http://rsdn.ru/Info/Howtoask.xml
... << RSDN@Home 1.2.0 alpha 4 rev. 1111 on Windows Vista 6.0.6001.65536>>
AVK Blog
Re[11]: полная_остановка_кода_С#
От: AK85 Беларусь  
Дата: 30.09.08 06:38
Оценка:
Здравствуйте, slavenin137, Вы писали:

S>>>интересно как ShowDialog остановит код после нажатия кнопочки отмена у дочерней формы...


S>>Иронизируете? 3-я страница, а несколько человек, которые в дотнете не первый год, не могут понять, что вы хотите?!?!?

S>я приношу извинения за свои неясные объяснения... но ShowDialog все равно не в тему)))

Может Debug.Assert(false) подойдет, можно одним нажатием попасть в отладчик.
Re[3]: полная_остановка_кода_С#
От: Lloyd Россия  
Дата: 30.09.08 09:02
Оценка:
Здравствуйте, slavenin137, Вы писали:

S>nikov, описанные вами методы полностью закрывают программу, а как сделать так чтобы форма оставалась на экране — но код не выполнялся — а начинал выполняться только при нажатии button


Сама постановка задачи противоречивая. С одной стороны, ты хочешь, чтобы код не выполнялся, а с другой — чтобы обрабатывался клик на кнопке. Второе невозможно, если никакого кода не выполняется, т.к. должен выполняться хотя бы цикл выборки оконных сообщений.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Re[9]: полная_остановка_кода_С#
От: vit0s Австрия  
Дата: 01.10.08 12:44
Оценка:
return;


?
Никому не верь — и никто не обманет!
Re: полная_остановка_кода_С#
От: KRA Украина  
Дата: 01.10.08 20:52
Оценка: 4 (2)
Здравствуйте, slavenin137, Вы писали:

S>Добрый день!

S>Скажите пожалуйста как сделать так чтобы при опреденных обстоятельствах выполнение кода преращалось?
S>т.е.
S>...
S>...
S>if (...) { СТОП!; }

Думаю, что правильный ответ прозвучал
Автор: AngeL B.
Дата: 29.09.08
. Я лишь немного уточню.

Правильно ли я понимаю, что происходит следующее:
1. по какому-то событию (я так понял по нажатию на конопку) запускается обработчик события (назовём его eventHandler)
2. внутри него вызывается какая-то функция которая может работать долго (назовём её longRunningFunc)
3. в функции longRunningFunc ( или в какой-то функции A, которая прямо или непрямо вызывается из longRunningFunc) по какому-то условию показывается диалог, который спрашивает, что-то вроде "остановить процес?"
4. если пользователь говорит "я буду мужественно ждать", ничего не происходит — longRunningFunc и дальше продолжает заполнять список
5. если же пользователь выбрал вариант "с меня хватит", то мы должны завершить longRunningFunc и eventHandler.

Если всё вышенаписаное приблизительно так и есть, то для получения нужного еффекта без существенных переделок нужно
1. создать класс AbortLongRunningFuncException
2. вызов longRunningFunc в eventHandler-e заключить в try/catch вот так

void eventHandler(...) 
{
...
try {
list = longRunningFunc(...)
} catch (AbortLongRunningFuncException e)
{
return;
}

}


3. в месте где надо оборвать жизнь longRunningFunc (в вопросе в том месте написано СТОП!) бросить исключение AbortLongRunningFuncException
Re[2]: полная_остановка_кода_С#
От: slavenin137  
Дата: 01.10.08 20:56
Оценка:
Здравствуйте, KRA, Вы писали:

KRA>Здравствуйте, slavenin137, Вы писали:


S>>Добрый день!

S>>Скажите пожалуйста как сделать так чтобы при опреденных обстоятельствах выполнение кода преращалось?
S>>т.е.
S>>...
S>>...
S>>if (...) { СТОП!; }

KRA>Думаю, что правильный ответ прозвучал
Автор: AngeL B.
Дата: 29.09.08
. Я лишь немного уточню.


KRA>Правильно ли я понимаю, что происходит следующее:

KRA>1. по какому-то событию (я так понял по нажатию на конопку) запускается обработчик события (назовём его eventHandler)
KRA>2. внутри него вызывается какая-то функция которая может работать долго (назовём её longRunningFunc)
KRA>3. в функции longRunningFunc ( или в какой-то функции A, которая прямо или непрямо вызывается из longRunningFunc) по какому-то условию показывается диалог, который спрашивает, что-то вроде "остановить процес?"
KRA>4. если пользователь говорит "я буду мужественно ждать", ничего не происходит — longRunningFunc и дальше продолжает заполнять список
KRA>5. если же пользователь выбрал вариант "с меня хватит", то мы должны завершить longRunningFunc и eventHandler.

KRA>Если всё вышенаписаное приблизительно так и есть, то для получения нужного еффекта без существенных переделок нужно

KRA>1. создать класс AbortLongRunningFuncException
KRA>2. вызов longRunningFunc в eventHandler-e заключить в try/catch вот так

KRA>
KRA>void eventHandler(...) 
KRA>{
KRA>...
KRA>try {
KRA>list = longRunningFunc(...)
KRA>} catch (AbortLongRunningFuncException e)
KRA>{
KRA>return;
KRA>}

KRA>}
KRA>


KRA>3. в месте где надо оборвать жизнь longRunningFunc (в вопросе в том месте написано СТОП!) бросить исключение AbortLongRunningFuncException


а ещё на меня тут бочку катили что я плохо объяснил))) Вот! пришел человек и все правильно понял!
спасибо огромное=)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.