|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Речь идет об SmtpClient из System.Net.Mail. Метод client.Send(message) все таки очень мерзопакостно завешивает вызывающий поток. (CDO кстати ТАК не завешивает!!!) Ну собственно они и рекомендуют сlient.SendAsync(message, "userToken") Что на пальцах выглядит так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.
Что я хочу. Указать SendCompletedCallback в качестве параметра к общей ф-ции SendMailMessage, которую для себя накатал.( 17103116 ) Использовать какую-то "общую" SendCompletedCallback я не могу, т.к. в ней идет обработка результата отправки, что зависит от задачи. Т.е. я пытаюсь сделать вот это: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
?1.Нижняя выделенная строчка ругается. Понятно что написал хрень, но смысл чего хочу понятен. Как правильно передать SendCompletedCallback в SendMailMessage? Второй видимый вариант решения. По хорошему мне бы вернуть конечный OK/str_error из самой SendMailMessage. ?2.Возможно ли грамотно реализовать что-то типа???: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:07 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77, Примитивизм бейсика при написании простого кода при написании более сложного превращается в белый стих буквально... Мне показалось, что вы считаете, что использование эвентов и функций обратного вызова решит вам проблему замораживания формы? Без использования BackgroundWorker а хотябы это не получится. Все поднявшиеся эвенты вызваю любые обработчики в том же потоке. А когда вы начнете разбираться с многопоточностью, то и обратный вызов будет выглядеть по-другому... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:34 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77, .SendAsync -я вот даже не заметил. :-( ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:38 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
D129Без использования BackgroundWorker а хотябы это не получится. Все поднявшиеся эвенты вызваю любые обработчики в том же потоке. А когда вы начнете разбираться с многопоточностью, то и обратный вызов будет выглядеть по-другому... async/away ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:39 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77 Код: vbnet 1.
ну и жестянство ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:40 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
hVosttD129Без использования BackgroundWorker а хотябы это не получится. Все поднявшиеся эвенты вызваю любые обработчики в том же потоке. А когда вы начнете разбираться с многопоточностью, то и обратный вызов будет выглядеть по-другому... async/away он под .net 2.0 пишет ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:42 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77, Да вроде все правильно. Может у вас просто тип делегата (количество параметров) не совпадает? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:43 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77, Как ругается - тоже бы неплохо было узнать. :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:45 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
skyANAон под .net 2.0 пишет печалька² ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 10:57 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
D129, >Да вроде все правильно. Может у вас просто тип делегата (количество параметров) не совпадает? Да, давайте лучше состедоточимся на вопросе о том как передать CallBack ф-цию в качестве параметра отбросив критику архитектуры и т.п. Хотя, я понимаю что всякие AdressOf -это VB-specific синтаксисы. >Как ругается - тоже бы неплохо было узнать. Если в коде в точности как я привел, то компилятор подчеркивает и пишет Выражение AddressOf нельзя преобразовать в "System.Delegate", поскольку тип "System.Delegate" объявлен с модификатором MustInherit и не может быть создан. Ну, я просто не знаю приема как это правильно делается. М.б. как то надо Private Delegate Function CallBackDelegate... объявить, вопрос то скорее технически-синтаксический как это все оформить >он под .net 2.0 пишет Я под .Net 4.5 делаю. Но контролирую совместимость относительно .Net 2.0 и относительно x86/x64. И кое-что приходится подправлять после этих проверок. Нельзя на Net 4.5 закладываться пока XP еще живо. >return true/[false + str_error ] >ну и жестянство не придирайся. Речь шла всего-лишь о том чтобы вернуть конечный результат из самой ф-ции а не из CallBack >BackgroundWorker,разбираться с многопоточностью Я счас не ставлю вопрос об этом В примитиве Application.DoEvents() достаточно, чтобы не вешать. CDO.Message.Send() кстати не вешает форму а System.Net.Mail.SmtpClient.Send() (без Async) -вешает ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:14 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77>он под .net 2.0 пишет Я под .Net 4.5 делаю. Но контролирую совместимость относительно .Net 2.0 и относительно x86/x64. И кое-что приходится подправлять после этих проверок. Нельзя на Net 4.5 закладываться пока XP еще живо.Это смотря какая архитектура. К примеру рассылку писем можно через очередь организовать. Клиентское приложение ставит сообщение в очередь, а сервис (что крутится не на XP) выгребает эту очередь в несколько потоков и выполняет Send. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:26 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77Нельзя на Net 4.5 закладываться пока XP еще живо. Зато 4.0 на XP работает. И на 4.0 можно заюзать async/await через BCL. Проходили уже А 2.0 уже давным давно пора похоронить и не вспоминать всуе. Дмитрий77>BackgroundWorker,разбираться с многопоточностью Я счас не ставлю вопрос об этом Ты вроде не хотел зависаний во время отправки писем? BackgroundWorker — то, что Малахов прописал. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:27 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
skyANAК примеру рассылку писем можно через очередь организовать. Клиентское приложение ставит сообщение в очередь, а сервис (что крутится не на XP) выгребает эту очередь в несколько потоков и выполняет Send. куда ж тя понесло? человек пока азы .НЕТ-а старается осилить, да ещё и на VB — это сильно! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:29 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
hVosttskyANAК примеру рассылку писем можно через очередь организовать. Клиентское приложение ставит сообщение в очередь, а сервис (что крутится не на XP) выгребает эту очередь в несколько потоков и выполняет Send. куда ж тя понесло? человек пока азы .НЕТ-а старается осилить, да ещё и на VB — это сильно!А тебе-то что? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:32 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77CDO.Message.Send() кстати не вешает форму а System.Net.Mail.SmtpClient.Send() (без Async) -вешает всё логично. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:33 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
skyANAА тебе-то что? пытаюсь понять, зачем ты занимаешься садизмом ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:35 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
hVosttskyANAА тебе-то что? пытаюсь понять, зачем ты занимаешься садизмомА, ну валяй. Только я тебе тут не помогу, потому как я не считаю, что занимаюсь садизмом. Так что ты как-нибудь сам разберись в своих выводах. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:36 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
skyANAА, ну валяй. Только я тебе тут не помогу, потому как я не считаю, что занимаюсь садизмом. Так что ты как-нибудь сам разберись в своих выводах. едкая муха укусила? хотя чего я спрашиваю, ты ж в своём репертуаре ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:40 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
hVosttskyANAА, ну валяй. Только я тебе тут не помогу, потому как я не считаю, что занимаюсь садизмом. Так что ты как-нибудь сам разберись в своих выводах. едкая муха укусила? хотя чего я спрашиваю, ты ж в своём репертуаре Нет, просто смайлики не ставлю, чтобы набросить тебе мыслей для анализа. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:41 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
skyANAНет, просто смайлики не ставлю, чтобы набросить тебе мыслей для анализа. ну я ж говорю, ты в своём репертуаре. лишь бы чего-нибудь набросить, каких-нибудь анализов ) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 11:58 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
hVosttskyANAНет, просто смайлики не ставлю, чтобы набросить тебе мыслей для анализа. ну я ж говорю, ты в своём репертуаре. лишь бы чего-нибудь набросить, каких-нибудь анализов )А чего бы не набросить, коли тебе так и хочется их. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 12:01 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
hVosttДмитрий77CDO.Message.Send() кстати не вешает форму а System.Net.Mail.SmtpClient.Send() (без Async) -вешает всё логично. Логично то оно логично. Только CDO.Message.Send() , не вешая форму ждет результата (предполагаю что он внутри себя содержит DoEvents()) System.Net.Mail.SmtpClient.Send() ( без Async ) -тоже ждет результата (но при этом очевидно НЕ содержит никаких DoEvents()) А после System.Net.Mail.SmtpClient.Send Async () -который форму НЕ завешивает и поэтому предпочтительней результат надо отлавливать через CallBack. Улавливаешь разницы? Ладно, счас сделаю простой проект и буду думать как в ф-цию CallBack скормить. Потому как вопрос интересный. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 12:11 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77, Вот интересное чтиво на эту тему, очень рекомендую ознакомиться http://stackoverflow.com/questions/5181777/use-of-application-doevents ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 12:37 |
|
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
|
|||
---|---|---|---|
#18+
Дмитрий77, Application.DoEvents() - The call of the devil. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2015, 12:38 |
|
|
start [/forum/topic.php?fid=20&msg=38852133&tid=1402031]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
44ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 368ms |
total: | 519ms |
0 / 0 |