Toon posts:

[C#] Code binnen Event handler wordt afgebroken

Pagina: 1
Acties:
  • 114 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
ik heb een event, (afkomstig van Directx.Grabber ) wat elke seconde een keer of dertig wordt aangeroepen (framerate van video device)

in mijn code ben ik slechts 1 keer geinteresseerd in deze event (als ik een screenshotje wil maken)
dus ik registreer een methode bij de event, en deregistreer hem zodra ik hem een keer heb ontvangen.:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
private void grabPicture(object sender, System.EventArgs e)
{
            addLogEntry("The doorbell rings");
            capture.FrameEvent2 += new Capture.HeFrame(CaptureDone);
            capture.GrapImg();            
}
private void CaptureDone(System.Drawing.Bitmap e)
{                        
            capture.FrameEvent2 -= new Capture.HeFrame(CaptureDone);
            this.pictureBox.Image=e;
            addLogEntry("Capture Done: ");
            string s = DateTime.Now.ToString() + ".jpg";
            e.Save("Images\\" + s ,System.Drawing.Imaging.ImageFormat.Jpeg);
            addLogEntry("Saved Image: " + s);
            clients.ForEach(delegate(Client cl)
            {
                sendMessage(cl.hostname, cl.port, "The doorbell rings");
            });
}


Maar met de debugger merkte ik dat de code na this.pictureBox.Image = e; niet meer wordt uitgevoerd, de methopde 'stopt' gewoonweg ergens midden in addLogEntry()

Iemand enig idee? Ik snap er ieg niks van

  • whoami
  • Registratie: December 2000
  • Laatst online: 20:35
Stopt ie altijd op dezelfde regel binnen addLogEntry() ?
Maak je gebruik van meerdere threads ?
Ben je zeker dat er nergens een exceptie gegooid wordt die je gewoon 'opeet' ?

https://fgheysels.github.io/


Verwijderd

Topicstarter
geen threads, geen exceptie, altijd de zelfde regel zal ik es proef ondervindelijk ondervinden

  • __fred__
  • Registratie: November 2001
  • Laatst online: 14-02 19:16
genereert dit geen nieuwe event?

this.pictureBox.Image=e;

Verwijderd

Topicstarter
altijd op de zelfde plek:
snippet:

C#:
1
2
3
4
5
6
7
default:
{
  logField.SelectionColor = Color.Black;
  logField.SelectedText = DateTime.Now.ToString() + " " + message + 
  System.Environment.NewLine;
  break;
}


hij neemt logField.SelectionColor = Color.Black;
nog mee, maar dan gaat de debugger verder met "running"

Verwijderd

Topicstarter
quote: fred
genereert dit geen nieuwe event?

this.pictureBox.Image=e;
Ja vast en zeker, maar niet een waar ik wat mee doe, maar dat mag toch geen probleem zijn?

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
offtopic:
Zou je voortaan [code=c#] ... [/code] blokken om je C# code heen willen zetten? Dat maakt het wat leesbaarder ;) (Ik heb het nu voor je gedaan, maar let er a.u.b. op).

[ Voor 4% gewijzigd door RobIII op 30-08-2006 18:21 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Stel je debugger eens zo in dat hij stopt bij alle exceptions die getrowed worden ( Dus niet alleen de uncaught exceptions ) en stap er dan eens gewoon door met je debugger. Dan zal je waarschijnlijk wel zien waar het mis gaat. Een methode wordt niet zomaar afgebroken zonder dat er een exception op treedt of dat je thread gekilled wordt.

“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
rwb, dank je wel, ik snap nog niet goed waar die vandaan komt, maar dr is inderdaad sprake van een exception.

IvalidOperationException
Cross-thread operation not valid: Control 'logField' accessed from a thread other than the thread it was created on.

Ik maak geen threads aan, maar die zal dan wel vanuit de onderliggende capture dll komen. Wat ik nog niet begrijp is waarom image geen problemen geeft en logfield wel:
C#:
1
2
3
4
5
6
private void CaptureDone(System.Drawing.Bitmap e)
{                        
  capture.FrameEvent2 -= new Capture.HeFrame(CaptureDone);            
  this.pictureBox.Image = e;               <<-- geeft geen problemen
  this.logField.SelectedText = "ola";    <<-- exception       
}


maar van hier kan ik mezelf als het goed is wel weer redden, bedankt voor de hulp

ps: roblll ik zal er om denken

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Met externe dll's die events aanroepen is het zowiezo handig om altijd op InvokeRequired te controleren. Je weet immers nooit hoe die dll's met threads omgaan.

“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