Beste tweakers,
Ik roep in mijn programma een functie aan die een mp3 afspeelt als er op de serialport een bepaalde waarde binnen komt. Ik gebruik de serialPort_DataReceived event om de functie aan te roepen.
Hierbij krijg ik de error "System.InvalidOperationException was unhandled
Message=Het is niet toegestaan een bewerking uit te voeren via verschillende threads: er werd vanaf een andere thread toegang gekregen tot het besturingselement Main dan de thread waarop het element is gemaakt."
Mijn code is als volgt
De fout staat bij "mciSendString(sSoundCommand, null, 0, this.Handle);"
Als ik google vind ik alleen maar dat je moet invoke moet gebruiken,wat ik al doe.
Ik snap niet waarom ik een fout krijgt dat er van een andere thread wordt aangeroepen want ik invoke toch al?
Het enige wat ik nog kan bedenken is dat this.InvokeRequired niet bij de juiste control kijkt of er een invoke nodig is.
Hebben jullie tips waar het aan kan liggen?
Ik roep in mijn programma een functie aan die een mp3 afspeelt als er op de serialport een bepaalde waarde binnen komt. Ik gebruik de serialPort_DataReceived event om de functie aan te roepen.
Hierbij krijg ik de error "System.InvalidOperationException was unhandled
Message=Het is niet toegestaan een bewerking uit te voeren via verschillende threads: er werd vanaf een andere thread toegang gekregen tot het besturingselement Main dan de thread waarop het element is gemaakt."
Mijn code is als volgt
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| [DllImport("winmm.dll")] private static extern long mciSendString(string strCommand, StringBuilder strReturn, int iReturnLength, IntPtr hwndCallback); delegate void MP3CallBack(string sMp3Path); void playMP3(string sMp3Path) { if (this.InvokeRequired) { MP3CallBack d = new MP3CallBack(playMP3); this.Invoke(d, new object[] { sMp3Path }); } else { sSoundCommand = "open \"" + sMp3Path + "\" type mpegvideo alias MediaFile"; mciSendString(sSoundCommand, null, 0, IntPtr.Zero); sSoundCommand = "play MediaFile notify"; mciSendString(sSoundCommand, null, 0, this.Handle); } } |
De fout staat bij "mciSendString(sSoundCommand, null, 0, this.Handle);"
Als ik google vind ik alleen maar dat je moet invoke moet gebruiken,wat ik al doe.
Ik snap niet waarom ik een fout krijgt dat er van een andere thread wordt aangeroepen want ik invoke toch al?
Het enige wat ik nog kan bedenken is dat this.InvokeRequired niet bij de juiste control kijkt of er een invoke nodig is.
Hebben jullie tips waar het aan kan liggen?