Toon posts:

[VB.NET / C#] Problemen met afvangen events van c# naar vb

Pagina: 1
Acties:
  • 281 views

Anoniem: 39362

Topicstarter
Voor een project ben ik bezig om een iphone pushnotification provider te bouwen. Daarvoor gebruik ik de APNS-Sharp library. De website, waarvandaan de push notificaties verzonden kunnen worden, is gemaakt in VB.NET

Push notification zelf heb ik gelukkig werkende, maar er worden een aantal events geraised in APNS, die ik graag zou willen afhandelen, iets wat we maar niet lukt. Nu moet ik zeggen dat ik nauwelijks werk met events en threading en dat mijn c# skills misschien net iets tekort schieten. Hopelijk dat een medetweaker me kan helpen om dit probleem op te lossen...

Originele code (console app)

C#:
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
47
48
49
50
51
52
53
54
55
using JdSoft.Apple.Apns.Notifications; 

namespace JdSoft.Apple.Apns.Test 
{ 
    class Program 
    { 
        [STAThread] 
        static void Main(string[] args) 
        { 
            NotificationService service = new NotificationService(sandbox, p12Filename, p12FilePassword, 1); 

            service.Error += new NotificationService.OnError(service_Error); 
            service.Connecting += new NotificationService.OnConnecting(service_Connecting); 
            service.Connected += new NotificationService.OnConnected(service_Connected); 
             
            for (int i = 1; i <= count; i++) 
            { 
                Notification alertNotification = new Notification(testDeviceToken); 
                 
                if (service.QueueNotification(alertNotification)) 
                    Console.WriteLine("Notification Queued!"); 
                else 
                    Console.WriteLine("Notification Failed to be Queued!"); 

                //Sleep in between each message 
                if (i < count) 
                { 
                    Console.WriteLine("Sleeping " + sleepBetweenNotifications + " milliseconds before next Notification..."); 
                    System.Threading.Thread.Sleep(sleepBetweenNotifications); 
                } 
            } 
             
            service.Close(); 
            service.Dispose(); 
            Console.ReadLine(); 
        } 

        /* paar eventhandlers weggehaald */
       
         static void service_Disconnected(object sender) 
        { 
            Console.WriteLine("Disconnected..."); 
        } 

        static void service_Connected(object sender) 
        { 
            Console.WriteLine("Connected..."); 
        } 

        static void service_Error(object sender, Exception ex) 
        { 
            Console.WriteLine(string.Format("Error: {0}", ex.Message)); 
        } 
    } 
}


Mijn implementatie daarvan

Visual Basic .NET:
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
Imports JdSoft.Apple.Apns.Notifications 

Public Class modManagerPushNotification 
  Private Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSave.Click 
    RunStuff() 
  End Sub 

  Public WithEvents service As NotificationService 

  Sub RunStuff() 
    service = New NotificationService(sandbox, p12Filename, p12FilePassword, 1) 

    AddHandler service.Connected, AddressOf service_Connected 
    'werkt niet

    Dim alertNotification As New Notification(testDeviceToken) 

    If service.QueueNotification(alertNotification) Then 
      Console.WriteLine("Notification Queued!") 
    Else 
      Console.WriteLine("Notification Failed to be Queued!") 
    End If 

    service.Close() 
    service.Dispose() 
  End Sub 

  'werkt niet
  Private Shared Sub service_Connected(ByVal sender As Object) 
    HttpContext.Current.Response.Write("Wroah...") 
  End Sub 

  'werkt niet
  Private Shared Sub service_Connecting(ByVal sender As Object) Handles service.Connecting
    HttpContext.Current.Response.Write("Connecting...") 
  End Sub 
  
  '(etcetera)
End Class


De vraag is dus, hoe ik bijvoorbeeld het "onconnected" event handlen in Private Shared Sub service_Connected ? En hoe zit dat met "service.Error += new NotificationService.OnError(service_Error);" ?

[Voor 164% gewijzigd door Anoniem: 39362 op 21-06-2011 14:09]


  • TJHeuvel
  • Registratie: Mei 2008
  • Niet online
Even zoeken op VB Events en je komt gewoon uit bij de MSDN manual.

Freelance Unity3D developer


  • Snake
  • Registratie: Juli 2005
  • Laatst online: 26-05 18:56

Snake

Los Angeles, CA, USA

Going for adventure, lots of sun and a convertible! | GMT-8


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 22-05 23:04

Niemand_Anders

Dat was ik niet..

Maar waarom ben je bezig met het porten van deze code?

Is het niet gewoon eenvoudiger om een C# project aan je solution toe te voegen waarin de originele code wordt gebruikt en de rest van je solution verder bestaat uit VB projecten (of andersom)?

Je hoeft namelijk dan niet de code te porten en mocht de originele developer een bugfix uitbrengen dan kun je deze gewoon doorvoeren. En blijkbaar had je het al werkend in C#.

If it isn't broken, fix it until it is..


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Het is niet de bedoeling dat je zulke grote lappen code post. We gaan hier niet jouw code debuggen, dat mag je zelf doen. Als je code post dan zien we graag alleen korte relevante stukken code.

Verder zou ik graag wat meer informatie zien over wat je zelf al geprobeerd hebt, en wat daar niet mee wilde lukken. Er is genoeg informatie te vinden over hoe je events kunt afvangen in zowel VB.NET als C#

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Anoniem: 39362

Topicstarter
Bedankt voor de tips. Zelf had ik natuurlijk eerst gegoogled, ingelezen en geëxperimenteerd alvorens dit topic te plaatsen.

Want, dat zie je in de code terug:

Public WithEvents service As NotificationService (dus ik declare dat NotificationService events kan throwen)
Verder probeer ik events te handlen (Private Shared Sub service_Disconnected(ByVal sender As Object) Handles service.Disconnected) en daarnaast ook via AddHandler statement om dynamisch te mappen.

Helaas zonder resultaat. Als dit inderdaad de juiste methodes zijn, dan sta ik verder voor een raadsel, ik heb geen idee waar het probleem dan kan liggen of waar ik verder moet zoeken. In de console app versie worden de events iig wel geraised.

Mijn excuses voor het plaatsen van de vele code. Vaak blijkt echter dat bij het plaatsen van minimale code snel de vraag volgt "kan je s.v.p. de complete code plaatsen?", vandaar.

NB: integratie liefst idd in VB.net. Dat biedt mij enorm veel voordelen.

  • jan-marten
  • Registratie: September 2000
  • Laatst online: 04-06 19:48
Een object vooraf declareren met WithEvents is hetzelfde als het achteraf te doen met de AddHandler.
Je moet in het laatste geval wel even de boel opruimen (bij nogmaals een AddHandler te doen kun je het event mogelijkerwijs dubbel krijgen).

Heb je het ook getest met breakpoints/debug code erin?

Ik zie trouwens dat het private shared sub service_Disconnected is. Moet dit niet gewoon private zijn en zonder die shared?

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Anoniem: 39362 schreef op dinsdag 21 juni 2011 @ 13:55:
Bedankt voor de tips. Zelf had ik natuurlijk eerst gegoogled, ingelezen en geëxperimenteerd alvorens dit topic te plaatsen.

Want, dat zie je in de code terug:
Maar dat zou betekenen dat wij de moeite moeten gaan nemen om jouw code door te spitten. Als je gewoon een klein voorbeeld van je probleem maakt, dan is het in een oogopslag duidelijk.
Mijn excuses voor het plaatsen van de vele code. Vaak blijkt echter dat bij het plaatsen van minimale code snel de vraag volgt "kan je s.v.p. de complete code plaatsen?", vandaar.
Als die vraag komt, betekend dat dat je stuk code niet duidelijk en relevant genoeg is, of dat de daarbij behorende uitleg niet voldoende is.

Het is dan ook zeker niet de bedoeling dat je je code weer zomaar intergraal terug plaats. Dit topic gaat in ieder geval op slot.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”

Pagina: 1

Dit topic is gesloten.


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee