powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
48 сообщений из 48, показаны все 2 страниц
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851947
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь идет об 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.
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
      Dim client As New SmtpClient()
...
      Dim message As New MailMessage()
...
      AddHandler client.SendCompleted, AddressOf SendCompletedCallback
      client.SendAsync(message, "userToken")
    Catch
      MsgBox(Err.Description)
    End Try
  End Sub

  Private Sub SendCompletedCallback(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
    ' Get the unique identifier for this asynchronous operation. 
    Dim token As String = CStr(e.UserState)

    If e.Cancelled Then
      MsgBox("Send canceled.")
    End If
    If e.Error IsNot Nothing Then
      MsgBox(e.Error.Message, , token)
    Else
      MsgBox("Message sent.")
    End If
  End Sub



Что я хочу. Указать 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.
Public Function SendMailMessage(Optional ByVal m_msg_FromAddress As String = vbNullString,
...
                                  Optional ByVal m_CallbackFunction As [Delegate] = Nothing,
                                  Optional ByVal m_emailToken As String = vbNullString,
                                  Optional ByRef str_error As String = vbNullString
                                  ) As Boolean

          If IsNothing(m_CallbackFunction) Then
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail")
            .Send(message)
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail...Done")
            AddLogCDO("-------------------------")
            Return True
          Else
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail asynchronously")
            AddLogCDO(Chr(9) & Chr(9) & "Token=" & m_emailToken)
            AddHandler client.SendCompleted, m_CallbackFunction
            .SendAsync(message, m_emailToken)
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail asynchronously...waiting for the result")
            AddLogCDO("-------------------------")
            Return True
          End If
...
    If SendMailMessage("sender@hotmail.com",...
     ..."smtp.live.com", 567, True, "sender@hotmail.com", "password", True, False, AddressOf SendCompletedCallback, , str_err) ...


?1.Нижняя выделенная строчка ругается. Понятно что написал хрень, но смысл чего хочу понятен. Как правильно передать SendCompletedCallback в SendMailMessage?

Второй видимый вариант решения.
По хорошему мне бы вернуть конечный OK/str_error из самой SendMailMessage.

?2.Возможно ли грамотно реализовать что-то типа???:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Function SendMailMessage(...
...
            AddHandler client.SendCompleted, AddressOf SendCompletedCallback
            .SendAsync(message, m_emailToken)
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail asynchronously...waiting for the result")
            Do
               If (есть результат в SendCompletedCallback) Then Exit Do
               Application.DoEvents() 'чтоб она не "вешала" форму, и именно поэтому .Send(message) не катит
            Loop
            return true/[false + str_error ]
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851967
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Примитивизм бейсика при написании простого кода при написании более сложного превращается в белый стих буквально...
Мне показалось, что вы считаете, что использование эвентов и функций обратного вызова решит вам проблему замораживания формы?

Без использования BackgroundWorker а хотябы это не получится. Все поднявшиеся эвенты вызваю любые обработчики в том же потоке.

А когда вы начнете разбираться с многопоточностью, то и обратный вызов будет выглядеть по-другому...
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851973
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

.SendAsync -я вот даже не заметил.
:-(
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851976
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129Без использования BackgroundWorker а хотябы это не получится. Все поднявшиеся эвенты вызваю любые обработчики в том же потоке.

А когда вы начнете разбираться с многопоточностью, то и обратный вызов будет выглядеть по-другому...

async/away
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851977
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77
Код: vbnet
1.
return true/[false + str_error ]



ну и жестянство
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851979
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttD129Без использования BackgroundWorker а хотябы это не получится. Все поднявшиеся эвенты вызваю любые обработчики в том же потоке.

А когда вы начнете разбираться с многопоточностью, то и обратный вызов будет выглядеть по-другому...

async/away он под .net 2.0 пишет
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851980
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Да вроде все правильно. Может у вас просто тип делегата (количество параметров) не совпадает?
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851984
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Как ругается - тоже бы неплохо было узнать.
:-)
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38851999
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAон под .net 2.0 пишет

печалька²
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852017
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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) -вешает
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852041
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77>он под .net 2.0 пишет
Я под .Net 4.5 делаю. Но контролирую совместимость относительно .Net 2.0 и относительно x86/x64. И кое-что приходится подправлять после этих проверок. Нельзя на Net 4.5 закладываться пока XP еще живо.Это смотря какая архитектура.

К примеру рассылку писем можно через очередь организовать. Клиентское приложение ставит сообщение в очередь, а сервис (что крутится не на XP) выгребает эту очередь в несколько потоков и выполняет Send.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852042
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Нельзя на Net 4.5 закладываться пока XP еще живо.

Зато 4.0 на XP работает. И на 4.0 можно заюзать async/await через BCL. Проходили уже

А 2.0 уже давным давно пора похоронить и не вспоминать всуе.


Дмитрий77>BackgroundWorker,разбираться с многопоточностью
Я счас не ставлю вопрос об этом

Ты вроде не хотел зависаний во время отправки писем? BackgroundWorker — то, что Малахов прописал.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852047
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAК примеру рассылку писем можно через очередь организовать. Клиентское приложение ставит сообщение в очередь, а сервис (что крутится не на XP) выгребает эту очередь в несколько потоков и выполняет Send.

куда ж тя понесло? человек пока азы .НЕТ-а старается осилить, да ещё и на VB — это сильно!
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852053
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAК примеру рассылку писем можно через очередь организовать. Клиентское приложение ставит сообщение в очередь, а сервис (что крутится не на XP) выгребает эту очередь в несколько потоков и выполняет Send.

куда ж тя понесло? человек пока азы .НЕТ-а старается осилить, да ещё и на VB — это сильно!А тебе-то что?
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852054
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77CDO.Message.Send() кстати не вешает форму
а System.Net.Mail.SmtpClient.Send() (без Async) -вешает

всё логично.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852057
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА тебе-то что?

пытаюсь понять, зачем ты занимаешься садизмом
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852059
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAА тебе-то что?

пытаюсь понять, зачем ты занимаешься садизмомА, ну валяй. Только я тебе тут не помогу, потому как я не считаю, что занимаюсь садизмом. Так что ты как-нибудь сам разберись в своих выводах.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852065
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА, ну валяй. Только я тебе тут не помогу, потому как я не считаю, что занимаюсь садизмом. Так что ты как-нибудь сам разберись в своих выводах.

едкая муха укусила? хотя чего я спрашиваю, ты ж в своём репертуаре
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852069
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAА, ну валяй. Только я тебе тут не помогу, потому как я не считаю, что занимаюсь садизмом. Так что ты как-нибудь сам разберись в своих выводах.

едкая муха укусила? хотя чего я спрашиваю, ты ж в своём репертуаре Нет, просто смайлики не ставлю, чтобы набросить тебе мыслей для анализа.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852087
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНет, просто смайлики не ставлю, чтобы набросить тебе мыслей для анализа.

ну я ж говорю, ты в своём репертуаре. лишь бы чего-нибудь набросить, каких-нибудь анализов )
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852091
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAНет, просто смайлики не ставлю, чтобы набросить тебе мыслей для анализа.

ну я ж говорю, ты в своём репертуаре. лишь бы чего-нибудь набросить, каких-нибудь анализов )А чего бы не набросить, коли тебе так и хочется их.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852104
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 скормить. Потому как вопрос интересный.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852132
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Вот интересное чтиво на эту тему, очень рекомендую ознакомиться

http://stackoverflow.com/questions/5181777/use-of-application-doevents
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852133
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

Application.DoEvents() - The call of the devil.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852138
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДмитрий77,

Application.DoEvents() - The call of the devil.

Не согласен. Слишком мягкая критика, должно быть жёстче!
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852144
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДмитрий77,

Application.DoEvents() - The call of the devil.


Ну, и к тому же оно может как-то спасти при дискретной операции на вызовах между шагами операции. В случае длинной атомарной операции толку не будет вообще никакого. Я как-то сильно подозреваю, что синхронный Send - именно второй случай.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852187
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

не мучайся с делегатами, передавай интерфейс

Код: vbnet
1.
2.
3.
4.
5.
Optional ByVal m_CallbackFunction As IMyDelegate = Nothing

AddHandler client.SendCompleted, AddressOf m_CallbackFunction.SendCompletedCallback 

..."smtp.live.com", 567, True, "sender@hotmail.com", "password", True, False, AddressOf m_CallbackFunction.SendCompletedCallback 
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852203
petalvik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

объяви параметр как
Код: vbnet
1.
Optional ByVal m_CallbackFunction As SendCompletedEventHandler = Nothing,
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852279
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariy,

спасибо что откликнулся по сути, а то тема уже ушла далеко от темы вопроса как тут обычно бывает.
Но честно не понял что ты имел ввиду.

petalvikДмитрий77,

объяви параметр как
Код: vbnet
1.
Optional ByVal m_CallbackFunction As SendCompletedEventHandler = Nothing,


petalvik,

Все, спасибо тебе. Это четкий и правильный ответ на мой вопрос.
Заработало как хотелось.
Как-то так:

Код: 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.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Public Function SendMailMessage(Optional ByVal m_msg_FromAddress As String = vbNullString,
...
                                  Optional ByVal m_CallbackFunction As SendCompletedEventHandler = Nothing,
                                  Optional ByVal m_emailToken As String = vbNullString,
                                  Optional ByRef str_error As String = vbNullString
                                  ) As Boolean

          If IsNothing(m_CallbackFunction) Then
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail")
            .Send(message)
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail...Done")
            AddLogCDO("-------------------------")
            Return True
          Else
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail asynchronously")
            AddLogCDO(Chr(9) & Chr(9) & "Token=" & m_emailToken)
            AddHandler client.SendCompleted, m_CallbackFunction
            .SendAsync(message, m_emailToken)
            AddLogCDO(Now.ToString & Chr(9) & "Sending mail asynchronously...waiting for the result")
            AddLogCDO("-------------------------")
            Return True
          End If
...
    If SendMailMessage("sender@hotmail.com",...
     ..."smtp.live.com", 587, True, "sender@hotmail.com", "password", True, False, AddressOf SendCompletedCallback, "RandomToken", str_err) ...

  Private Sub SendCompletedCallback(ByVal sender As Object, ByVal e As AsyncCompletedEventArgs)
    ' Get the unique identifier for this asynchronous operation. 
    Dim token As String = CStr(e.UserState)

    AddLogCDO("-------------------------")
    If e.Error IsNot Nothing Then
      Dim str_err As String = "Error code: " & e.Error.HResult.ToString & " (" & e.Error.Message & ")"
      AddLogCDO(Now.ToString & Chr(9) & "Sending mail asynchronously...Failed. " & str_err)
      AddLogCDO(Chr(9) & Chr(9) & "Token=" & token)
      AddLogCDO("-------------------------")
      MsgBox("Sending mail...Failed." & vbCrLf & str_err, _
       vbCritical + vbOKOnly, "Sending mail failed.")
    Else
      AddLogCDO(Now.ToString & Chr(9) & "Sending mail asynchronously...Done")
      AddLogCDO(Chr(9) & Chr(9) & "Token=" & token)
      AddLogCDO("-------------------------")
      MsgBox("Test mail was sent successfully!", vbInformation + vbOKOnly, "Email was sent")
    End If

  End Sub


Но черт, про SendCompletedEventHandler ни за чтоб не догадался.

==
Второй вопрос снимаю, а то чувствую съедят с DoEvents(). Я не знаю чего там делает CDO.Send но ведет она себя асинхронно, т.е. ожидание MsgBox не мешает нажимать кнопки на форме.
А System.Net.Mail.SmtpClient.Send() (без Async) блочит напрочь.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852328
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Но черт, про SendCompletedEventHandler ни за чтоб не догадался.Странно, из документации жто вроде очевидно: SmtpClient.SendCompleted Event .
Там и пример есть.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852337
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAСтранно, из документации жто вроде очевидно: SmtpClient.SendCompleted Event .
Там и пример есть.
Пока рука не набита, не очевидно.
Я то на этот пример смотрел: SmtpClient.SendAsync Method (MailMessage, Object)
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852342
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Но честно не понял что ты имел ввиду.VB.NET отличается от VB6 тем, что в дотнете AddressOf способен вернуть адрес любого метода, а не только того, что объявлен в модуле. Поэтому можно передавать не метод, а объект, содержащий метод. Для унификации, контроля типов и просто удобства лучше, чтобы класс этого объекта реализовывал интерфейс. Поэтому под функцию для каждой задачи пишется отдельный класс с реализацией этого интерфейса. Плюс этого подхода — функция в интерфейсе может не иметь параметров, а класс может иметь собственные свойства, играющие роль параметров и задающиеся при создании объекта. Минус - больше кода и медленнее работа, но код проще и понятней, а на скорость в твоем случае можно забить, время исполнения задачи на порядки превышает время, затрачиваемое системой на возню с объектами.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852346
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фактически делегат в VB.NET вообще не нужен, я не могу придумать ситуацию, когда без него не обойтись.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852348
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И синтаксические конструкции с ним упоротые.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852390
Фотография D129
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyИ синтаксические конструкции с ним упоротые.

Я один раз написал на Виби интерфейс, и его реализацию.
Синтаксис позволяет поменять имя функции, которая имплеминтирует функцию интерфейса...
"В теле такая гибкость образовалась" (с)
:-)
Вот только зачем подобная возможность...
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852396
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
D129AntonariyИ синтаксические конструкции с ним упоротые.

Я один раз написал на Виби интерфейс, и его реализацию.
Синтаксис позволяет поменять имя функции, которая имплеминтирует функцию интерфейса...
"В теле такая гибкость образовалась" (с)
:-)
Вот только зачем подобная возможность...На тот случай, если захочешь испытать приятную гибкость в теле :)

Просто дает больше свободы в названиях, а принципиально — незачем.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852423
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Веселуха какая-то.
Старался-старался...вроде все чики-пуки
Тут обнаружил что gmail.com
при

client.SendAsync(message, "userToken")

игнорирует явно заданную UTF-8 в DisplayName адресов from/to и в Subject
(иероглифы присылает без указания кодировки перед указанными полями)

а для
client.Send(message)

все нормально.

С тем же кодом подготовки message!

А с Hotmail например все нормально.

Как такое может быть...
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852427
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если говорить точно, то вопрос "зачем" некорректен. Это просто следствие того, что раньше отношение реализации к интерфейсу синтаксически описывалось как Public Function ИмяИнтерфейся_ИмяФункции, а в дотнете в декларации членов класса появилось ключевое слово Implements, явно и типизированно указывающее на член интерфейса. Оно отделило имя члена интерфейса от имени члена класса, реализующего интерфейс.

Еще один момент: если объявить реализацию как Private, то она будет доступна только через интерфейс, а если Public, то и через класс тоже. Удобно, не нужно лишние касты делать :)
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852463
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77,

... разные почтовые сервера трактуют RFC совершенно свободолюбиво, при этом .net SMTP-клиент не совсем заточен под все возможные варианты ... Была в старых версиях .Net проблема с не-латинской темой и именем файла вложения более 40 байт (и МС даже выпускали заплатку) ... Ну и еще что-то может вылезти ... Поэтому - универсального рецепта с почтой нет .. Это вы еще за получение и парсинг не брались .. :)
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852490
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotik,

а я вот нарочно проверил. С Net 2.0/3.5 этот глюк с gmail/async/utf8 не вылезает, а вылезает только в Net 4/4.5.
Неоднозначностей море. CDO таки надежней сделано, однако.
Все, забиваю. А то счас начну еще галочки придумывать типа async/sync.

carrotikЭто вы еще за получение и парсинг не брались .. :)
вот поэтому и не хочу пока браться, а отдал это на откуп cmd-утилите. Вчера об этом только упомянул вскользь.

===
Antonary,

ты извини, не реагирую на твои посты.
Ты вот утверждал что на .Net быстрее в 5 раз все пишется, чет я этого пока не наблюдаю.
Год вообще не занимался, было интереснее всякие VOIP-фишки делать в рамках той системы к которой привык.
А вот счас типа взялся проект перекатывать, у меня в проекте несколько exe-шников, 3 больших.
3 месяца только на первом большом сижу, готовность его где-то 2/3.
Ну, интерфейс, да, чуть легче рисуется.
Но стоко всяких глюко-неоднозначностей.
Эх, когда еще дивиденты с этой затеи будут.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852531
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на c++ писать нужно
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852538
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77 Ты вот утверждал что на .Net быстрее в 5 раз все пишется, чет я этого пока не наблюдаю.Во-первых, нужно время руку набить, чтобы всякая тривиальщина писалась спинным мозгом, как например этот финт с заменой делегата. Я тоже не с первого подхода в дотнет вписался. Пробовать понемногу начал с 2003й версии, но осилил лишь 2008ю, ибо нужда совсем приперла.

Во-вторых, задача у тебя с точки зрения реализации не простая, хотя подобных продуктов хватает. Когда советовал, я еще очень смутно представлял, чем ты занимаешься. Я под десктоп пишу мало, в основном веб, а на сервере код настолько проще, что я уже дошел до автоматической генерации чуть менее, чем его половины.

В-третьих, у тебя очень высокие требования, которые дотнет не всегда способен удовлетворить, поскольку не покрывает 100% функционала системы.

Поэтому и не наблюдаешь, имхо.

Дмитрий77 ты извини, не реагирую на твои посты.ок, пейсать больше не буду :)
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852552
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Antonariyхотя подобных продуктов хватает.
Если имел ввиду софтфон, то я не его переписываю, а другой продукт - он перспективнее как ни странно. Хотя в софтфон души вложил больше и он написан грамотнее.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852707
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyVB.NET отличается от VB6 тем, что в дотнете AddressOf способен вернуть адрес любого метода, а не только того, что объявлен в модуле. Поэтому можно передавать не метод, а объект, содержащий метод. Для унификации, контроля типов и просто удобства лучше, чтобы класс этого объекта реализовывал интерфейс. Поэтому под функцию для каждой задачи пишется отдельный класс с реализацией этого интерфейса. Плюс этого подхода — функция в интерфейсе может не иметь параметров, а класс может иметь собственные свойства, играющие роль параметров и задающиеся при создании объекта. Минус - больше кода и медленнее работа, но код проще и понятней, а на скорость в твоем случае можно забить, время исполнения задачи на порядки превышает время, затрачиваемое системой на возню с объектами.Чтобы не заниматься этой мутотой придуманы лямбды и захват локальных переменных.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38852737
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, придумана еще большая мутота.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38853106
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyАга, придумана еще большая мутота.Нет.
...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38853173
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyАга, придумана еще большая мутота.

А тибе надо вот ето?

...
Рейтинг: 0 / 0
Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
    #38853254
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttAntonariyАга, придумана еще большая мутота.

А тибе надо вот ето?



Я сам их произвожу.
...
Рейтинг: 0 / 0
48 сообщений из 48, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как передать кастом-CallBack ф-цию в качестве аргумента в другую ф-цию?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]