Próbuję poznać niektóre zasady WCF, wykonując przykład aplikacji WCF (z Sacha Barber).GetInvocationList zdarzenia w VB.NET
Teraz chciałbym przekonwertować następujące funkcje w VB.NET
private void BroadcastMessage(ChatEventArgs e)
{
ChatEventHandler temp = ChatEvent;
if (temp != null)
{
foreach (ChatEventHandler handler in temp.GetInvocationList())
{
handler.BeginInvoke(this, e, new AsyncCallback(EndAsync), null);
}
}
}
ale mam pewne problemy, ponieważ następujący kod nie jest akceptowana przez kompilator
Private Sub BroadcastMessage(ByVal e As ChatEventArgs)
Dim handlers As EventHandler(Of ChatEventArgs) = ChatEvent
If handlers IsNot Nothing Then
For Each handler As EventHandler(Of ChatEventArgs) In handlers.GetInvocationList()
handler.BeginInvoke(Me, e, New AsyncCallback(AddressOf EndAsync), Nothing)
Next
End If
End Sub
mówi
Publiczne współdzielone wydarzenie ChatEvent (nadawca Jako obiekt, e jako ChatEventArgs) "jest wydarzenie, a nie może być wywołana bezpośrednio
Jadąc do punktu, jest wtedy możliwe w VB.NET uzyskać teleskopowe połączone z pewnego zdarzenia w jakiś inny sposób?
Pamiętaj, że używasz nieudokumentowanego członka na swojej klasie i (o ile się nie mylę), zasady dotyczące nazewnictwa nie mają takiego samego znaczenia w przyszłych wersjach kompilatora. –
@Adam - Tak, zdecydowanie nieudokumentowane, o ile widziałem, ale nie widzę, żeby je zmieniały, chyba że mają ku temu jakiś powód lub przynajmniej oferują alternatywę. W każdym razie jest to jedyny sposób, w jaki możesz to zrobić obecnie, bez zajmowania się wszystkimi wydarzeniami na własną rękę, jak w twoim przykładzie. Twój nadal będzie działał, jeśli go zmienią, ale wolałbym zapisać tę pracę, zważywszy na prawdopodobieństwo jej zmiany. –