Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

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

Pagina: 1
Acties:
  • 309 views

Verwijderd

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 Verwijderd 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: 07-03-2024

Snake

Los Angeles, CA, USA

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


  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

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.”


Verwijderd

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: 09:47
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®
Verwijderd 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.