|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Добрый день, мудрецы! Задача такая: Тривиально: есть статичный класс. В нём есть статичный метод который что-то там долго считает в отдельном потоке и докладывает о своём прогрессе. Сделал такую штуку: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Запускаю вот так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Когда у меня срабатывает событие, то поток блокируется пока оно не будет обработано, т.е. пока не закончит выполнение метод OnProgressChange(). Вопрос: Как избежать остановки потока? Моему потоку должно быть по фигу как его событие было обработано. Он дёрнул event передав прогресс и продолжил работу. Какое решение тут будет верным? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2014, 21:29 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Алексей Ку., тут надо просто ответить в каком потоке выполнится код OnProgressChange................ ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 00:26 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Алексей Ку., Может каким нибудь BeginInvoke райзить событие ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 07:37 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
После того, как разместил пост до меня и дошло что OnProgressChange выполняется в потоке статичного метода. ПОтому он и тормозит. Как я понял есть два решения: 1) Выполнить этот метод в контексте основного потока (какими средствами это делается?) 2) Создать отдельный поток для выполнения ивента Вопрос: Что правильнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 09:20 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Алексей Ку., 1. Inkove ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 09:40 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Мнэээ, invoke ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 09:41 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
PallarisInkoveBeginInvoke. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 11:36 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Алексей К, Вообще то это не эстетично, можно конечно и ибать козу с рогами но не эстетично, ведь первым аргументом у делегата идет sender, что там может быть - с ним в разных потоках одному богу известно, начиная от борьбы кончая : извините тут два стояло только что. Есть же масса вариантов кроме событий - выстрелил и забыл.. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 12:13 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 12:31 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Где-то в степиАлексей К, Вообще то это не эстетично, можно конечно и ибать козу с рогами но не эстетично, ведь первым аргументом у делегата идет sender, что там может быть - с ним в разных потоках одному богу известно, начиная от борьбы кончая : извините тут два стояло только что. Есть же масса вариантов кроме событий - выстрелил и забыл..Я не знаю что там с событиями. Я про синхронизацию с UI-потоком через Control.BeginInvoke. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 12:53 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Где-то в степиЕсть же масса вариантов кроме событий - выстрелил и забыл.. Оно? ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 12:56 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Алексей КЯ не знаю что там с событиями. Я про синхронизацию с UI-потоком через Control.BeginInvoke. Через Control.BeginInvoke оно в данном случае покажет первый MessageBox и будет ждать нажатия "ОК" и после этого покажет следующий? Без блокирования вторичного потока-вычислителя, разумеется. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 12:57 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
PallarisАлексей КЯ не знаю что там с событиями. Я про синхронизацию с UI-потоком через Control.BeginInvoke. Через Control.BeginInvoke оно в данном случае покажет первый MessageBox и будет ждать нажатия "ОК" и после этого покажет следующий? Без блокирования вторичного потока-вычислителя, разумеется.Так тогда вообще через async/await лучше делать. Можно и через "голый" Task, но сложнее... ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 13:06 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Алексей КТак тогда вообще через async/await лучше делать. Можно и через "голый" Task, но сложнее... Ага, ЕвгенийВ выше написал ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 13:33 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
PallarisАлексей КТак тогда вообще через async/await лучше делать. Можно и через "голый" Task, но сложнее... Ага, ЕвгенийВ выше написал В моем примере компилятор, будет трактовать Код: c# 1.
, как обычный идентификатор. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 14:32 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
ЕвгенийВ, Есть класс BackgroundWorker - помогает делать асинхронные вызовы в WinForms. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2014, 17:59 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
DontAskMeЕвгенийВ, Есть класс BackgroundWorker - помогает делать асинхронные вызовы в WinForms. Это рудимент 12+ летней давности. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2014, 01:24 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
ЕвгенийВDontAskMeЕвгенийВ, Есть класс BackgroundWorker - помогает делать асинхронные вызовы в WinForms. Это рудимент 12+ летней давности. А вся винда - рудимент 19+ давности... :-) В чем причина не использовать старую (а значит быструю) дллку? Её что, пометили к отключению? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2014, 13:57 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
ЕвгенийВЭто рудимент 12+ летней давности. Может и так, но все ж не deprecated. В моих проектах, где приложение крутится сутками и в нем 3-4 BackgroundWorkera (одних и тех же) копошатся весь цикл жизни - вроде справляются со своими задачами. Или под такие условия стоит что-то другое применить? Ну, когда не одноразовую работу асинхронно выполнить, а колбасить постоянно ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2014, 14:21 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
PallarisЕвгенийВЭто рудимент 12+ летней давности. Может и так, но все ж не deprecated. В моих проектах, где приложение крутится сутками и в нем 3-4 BackgroundWorkera (одних и тех же) копошатся весь цикл жизни - вроде справляются со своими задачами. Или под такие условия стоит что-то другое применить? Ну, когда не одноразовую работу асинхронно выполнить, а колбасить постоянно Скорее аргументом использовать что-то другое может быть только "политика постепенных изменений". Ну как с Линком - постепенно вводили новый синтаксис, отучали от циклов и индексов, а потом раз! - нате вам параллелинг. :-) Если бы весь код был по прежнему for(...) - то от параллелинга не было бы никакого толку. Не переписывать же. А так - технология в легкую начинает использоваться. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2014, 14:52 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
ЕвгенийВDontAskMeЕвгенийВ, Есть класс BackgroundWorker - помогает делать асинхронные вызовы в WinForms. Это рудимент 12+ летней давности. и в чем его (обертки над Thread) рудиментарность? Можно и самому велосипед придумать такой же, но смысл... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.03.2014, 22:48 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
WinnipuhЕвгенийВпропущено... Это рудимент 12+ летней давности. и в чем его (обертки над Thread) рудиментарность? Можно и самому велосипед придумать такой же, но смысл...+100500. В конечном итоге всё сводится к Thread... ... |
|||
:
Нравится:
Не нравится:
|
|||
24.03.2014, 17:04 |
|
Событие из потока без задержки
|
|||
---|---|---|---|
#18+
Alex KuznetsovВ конечном итоге всё сводится к Thread... TPL ... |
|||
:
Нравится:
Не нравится:
|
|||
25.03.2014, 11:04 |
|
|
start [/forum/topic.php?fid=20&msg=38591463&tid=1403112]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
49ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 169ms |
0 / 0 |