yo ihrs,
hab mal eine kleine Frage zum Threading. Hab mir das bei Galileo mal angegeuggt und auch im Forum bisschen gestöbert.
Hab das mal probiert zum umsetzen und nun folgenden Fehler "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement conMain erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
Zum Programm: Ich will mittels WMI Infos auslesen (funkt auch). Allerdings braucht er einfach beim Prozessor ein bisschen länger (is auch ok).
Anzeigen tu ich das ganze per ContextMenuStrip.
der sub zum Laden der Daten geschieht im Load Event. Wenn man nun das Programm startet und das Kontext-Menü aktiviert sieht man schon die Mainboard Bezeichnung aber wenn der dann den Prozessor auflisten will (während das Menü offen ist) kommt der oben genannte Fehler.
habe nun dazu 2 Fragen:
- Hab im Forum etwas über Invoke und Delegates gelesen. Wie funktionieren diese Methoden bzw wendet man diese richtig an?
- Ist der Code dazu dann soweit richtig? (siehe unten)
Spoiler anzeigen
lg
hab mal eine kleine Frage zum Threading. Hab mir das bei Galileo mal angegeuggt und auch im Forum bisschen gestöbert.
Hab das mal probiert zum umsetzen und nun folgenden Fehler "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement conMain erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde."
Zum Programm: Ich will mittels WMI Infos auslesen (funkt auch). Allerdings braucht er einfach beim Prozessor ein bisschen länger (is auch ok).
Anzeigen tu ich das ganze per ContextMenuStrip.
der sub zum Laden der Daten geschieht im Load Event. Wenn man nun das Programm startet und das Kontext-Menü aktiviert sieht man schon die Mainboard Bezeichnung aber wenn der dann den Prozessor auflisten will (während das Menü offen ist) kommt der oben genannte Fehler.
habe nun dazu 2 Fragen:
- Hab im Forum etwas über Invoke und Delegates gelesen. Wie funktionieren diese Methoden bzw wendet man diese richtig an?
- Ist der Code dazu dann soweit richtig? (siehe unten)
VB.NET-Quellcode
- Private Sub doFillConMainHardware()
- '*** Hardware-Infos befüllen ***
- tsmiMotherboardBezeichnung.Text = doGetHardwareInfo("Win32_BaseBoard", "Manufacturer") & _
- " " & doGetHardwareInfo("Win32_BaseBoard", "Product") 'Mainboardname auslesen
- tsmiProzessorBezeichnung.Text = doGetHardwareInfo("Win32_Processor", "Name") 'Prozessor
- tsmiArbeitsspeicherBezeichnung.Text = CStr(Double.Parse((My.Computer.Info.TotalPhysicalMemory / 1073741824).ToString("##0.00")) & " GB") 'Arbeitsspeicher
- tsmiGrafikkarteBezeichnung.Text = doGetHardwareInfo("Win32_VideoController", "Name") 'Grafikkarte
- End Sub
- 'im Load Event:
- Dim bgHWInfoFill As New Thread(AddressOf doFillConMainHardware)
- bgHWInfoFill.IsBackground = True
- bgHWInfoFill.Start()
lg