Hallo zusammen,
ich habe eine Software geschrieben, die über die RS232 Schnittstelle mit einem Mikrocontroller kommuniziert und die übermittelten Daten grafisch darstellt. Gezeichnet wird auf dem Control "Panel". Die Routine, in der das Zeichnen der Diagrammpunkte passiert sieht so aus.
Da mein Kollege und ich uns aufgeteilt haben (er die Hardware und hardwarenahe Programmierung, ich die PC-Software), habe ich mir zum Testen ein kleines Programm geschrieben, welches die Daten vorübergehend über die RS232 Schnittstelle schubst. Einfach damit ich testen kann, auch wenn die Hardware noch nicht so weit ist. Das hat auch wunderbar funktioniert.
Jetzt wo ich die Hardware angeschlossen und gestartet habe, bekomme ich in der Zeile "Dim g As Graphics = Graphics.FromImage(.Image)" die folgende Fehlermeldung.
Ich vermute, dass der Fehler erst mit der Hardware auftritt, weil die ihre Daten in einem höheren Tempo rüberschiebt als ich mit meinem Testprorgamm.
Ich habe mich versucht, in das Hdc-Thema einzulegen, hab es aber nicht verstanden.
Vielleicht kann mir hier jemand behilflich sein. Das wäre sehr nett.
Danke im Voraus.
Viele Grüße,
Alexander
ich habe eine Software geschrieben, die über die RS232 Schnittstelle mit einem Mikrocontroller kommuniziert und die übermittelten Daten grafisch darstellt. Gezeichnet wird auf dem Control "Panel". Die Routine, in der das Zeichnen der Diagrammpunkte passiert sieht so aus.
VB.NET-Quellcode
- Private Sub DrawDiagramPoint(MeasureValue As CheckHfpController.MeasureValueEventArgs)
- Dim DP As Integer ' Punktdurchmesser in Pixeln
- Dim BgImage As Image ' Hintergrundbild für das Diagramm
- Dim InvertY As Boolean ' Soll der Y-Wert Vorzeichen-invertiert aufgetragen werden?
- Dim YpHeight As Integer ' Gesamte Bildhöhe (Für Nullpunktumkehrung)
- Dim Xp0 As Integer ' X-Koordinate des 0-Punktes in Pixeln
- Dim Yp0 As Integer ' Y-Koordinate des 0-Punktes in Pixeln
- Dim XpMax As Integer ' X-Koordinate des Max-Wertes in Pixeln
- Dim YpMax As Integer ' Y-Koordinate des Max-Wertes in Pixeln
- Dim XMaxVal As Single ' X-Wert der maximalen X-Pixel-Koordinate
- Dim YMaxVal As Single ' Y-Wert der maximalen Y-Pixel-Koordinate
- ' [...] Hier werden ein paar Berechnungen mit den Punkten angestellt, die ich zur besseren Übersicht ausgeblendet habe
- With ScreenProduction.ProductPanels.Item(0) // Das sind meine leicht abgewandelten Panels
- If Not .ImageManipulated Then
- .Image = BgImage
- .ImageManipulated = True
- End If
- Dim g As Graphics = Graphics.FromImage(.Image)
- g.FillEllipse(Brushes.Red, New Rectangle(Xp - DP / 2, Yp - DP / 2, DP, DP))
- g.DrawImage(.Image, 0, 0)
- .Image = .Image
- g.Dispose()
- End With
- End Sub
Da mein Kollege und ich uns aufgeteilt haben (er die Hardware und hardwarenahe Programmierung, ich die PC-Software), habe ich mir zum Testen ein kleines Programm geschrieben, welches die Daten vorübergehend über die RS232 Schnittstelle schubst. Einfach damit ich testen kann, auch wenn die Hardware noch nicht so weit ist. Das hat auch wunderbar funktioniert.
Jetzt wo ich die Hardware angeschlossen und gestartet habe, bekomme ich in der Zeile "Dim g As Graphics = Graphics.FromImage(.Image)" die folgende Fehlermeldung.
Invalid OperationException wurde nicht behandelt.
Das Objekt wird bereits an anderer Stelle verwendet.
Rufen Sie die ReleaseHdc-Methode auf, wenn Sie das Gradikobjekt nach der GetHdc-Methode verwenden.
Ich vermute, dass der Fehler erst mit der Hardware auftritt, weil die ihre Daten in einem höheren Tempo rüberschiebt als ich mit meinem Testprorgamm.
Ich habe mich versucht, in das Hdc-Thema einzulegen, hab es aber nicht verstanden.
Vielleicht kann mir hier jemand behilflich sein. Das wäre sehr nett.
Danke im Voraus.
Viele Grüße,
Alexander