Autor Beitrag
asoechting
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Fr 30.07.10 09:56 
Hallo,

ich habe eine Funktion geschrieben, die, wenn sie aufgerufen wird, ein Event generiert. Eine Windows Form enthält eine Picturebox, die die über das Event-Argument übergebene Daten darstellt. Dazu rufe ich in der beim Event-Handler registrierten Methode der Form die Invalidate() Methode der Picturebox auf.

Wenn ich Programm auf meinem Rechner teste, werden die Daten dargestellt, d.h. das Event wird korrekt empfangen und verarbeitet. Führe ich dasselbe Programm nun auf einem anderen Rechner aus (beides XP und .NET 3.5), scheint das Event überhaupt nicht empfangen zu werden, was sich darin äußert, das keine Daten in der Picturebox dargestellt werden. Worin kann sich dieser Unterschied begründen?
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: Fr 30.07.10 10:47 
Hallo,

könntest Du mal bitte ein bisschen Code Deiner Anwendung zeigen, damit man sieht, wie Du das Event feuerst und auch einfangst?

Denn so aus dem Nichts kann, glaube ich, diese Frage bzw. der Fehler nicht geklärt werden.


MFG, Marko
asoechting Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Di 03.08.10 11:19 
Hallo,

hier ist der Code:

ausblenden volle Höhe C#-Quelltext
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:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
// In der Scanner-Klasse wird das Event deklariert und initialisiert, über einen Modifizierer kann sich die Außenwelt // anmelden
protected ScannerEvent scanEvent = new ScannerEvent();

 public event ScannerEvent.ScannerEventHandler ProfileReceived
        {
            add
            {
                this.scanEvent.ScannerProfileHandler += value;

            }

            remove
            {
                this.scanEvent.ScannerProfileHandler -= value;
            }
        }

// Innerhalb einer Verarbeitungsmethode wird das Event ausgelöst
protected void ProfileEvent(IntPtr iconBuffer, IntPtr frameGrabber, uint userData)
        {
            Console.WriteLine("Profil wird verarbeitet.");


            int ret = 0;
            int len;
            double[] profileBuffer = new double[MAX_RESOLUTION];

            unsafe{
                fixed (double* buffer_ptr = profileBuffer)
                {
                    //ranger.getProfileData(buffer_ptr, &len, ()iconBuffer.ToPointer());
                    ret = ranger.fetchProfile(buffer_ptr, &len, iconBuffer.ToPointer());
                }
            }

            if (ret == 0)
            {
                //Verarbeitung

                this.saveProfile(new double[MAX_RESOLUTION], profileBuffer, (uint)len);
                this.scanEvent.OnProfileReceived(thisnew ScannerEventArgs(this.profiles[this.profiles.Count - 1]));
            }
            else
            {
                Console.WriteLine("Profildaten konnten nicht gespeichert werden.");
            }
        }


// Im Testprogramm wird eine Methode beim EventHandler angemeldet, die das Event verarbeitet
((LaserScannerDevice)scanner).ProfileReceived += new ScannerEvent.ScannerEventHandler(Program_ProfileReceived);

static void Program_ProfileReceived(object sender, ScannerEventArgs e)
        {
            Console.WriteLine("Scanner-Event: Profil empfangen");
        }


// Und schließlich der Code für das Event selbst

    public class ScannerEvent
    {
        public delegate void ScannerEventHandler (object sender, ScannerEventArgs e);

        public event ScannerEventHandler ScannerProfileHandler;

        public void OnProfileReceived(object sender, ScannerEventArgs e)
        {
            if(ScannerProfileHandler!=null){
                ScannerProfileHandler(sender,e);
            }
        }
    }

    public class ScannerEventArgs:EventArgs
    {
        private Profile profile;

        public Profile ReceivedProfile
        {
            get
            {
                return profile;
            }
        }

        public ScannerEventArgs(Profile p)
        {

            this.profile = p;
        }
    }


Moderiert von user profile iconKha: C#-Tags hinzugefügt