Hallo, ich Programmiere gerade ein Programm, was nicht abstürzen soll wen man eine Aktion ausführt die ein bisschen Anspruchsvoller ist, nun möchte ich das mit einem Backgroundworker.RunWorkAsnc Machen, allerdings wenn ich etwas in eine ListView eintragen will gibt er mit einen Fehler aus. Vielen Dank im Voraus.
Thread übergreifend mit bWorker
- VB.NET
- .NET (FX) 4.5–4.8
Sie verwenden einen veralteten Browser (%browser%) mit Sicherheitsschwachstellen und können nicht alle Funktionen dieser Webseite nutzen.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Hier erfahren Sie, wie einfach Sie Ihren Browser aktualisieren können.
Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Matix Media.
-
-
Und schon wieder.
Warum postest du uns deinen Fehler nicht? Ist das so schwer einen verdammten Fehler zu posten? Meinst du wir können Hellsehen?
(Und da wundert sich einer das ich sagte das ist nicht Professionell ?)
Ganz egal das ich und andere nun bei dem Problem wissen was da VERMUTLICH der Fehler ist... ist es Hilfreich diesen zu posten.
Um von einem anderen Thread auf die GUI zuzugreifen musst du "Invoken" das wäre dein Stichwort zum suchen. -
ok, eine Sekunde Fehler wird Produziert...
Fehler erstellt:
"System.InvalidOperationException: "Ungültiger threadübergreifender Vorgang: Der Zugriff auf das Steuerelement ListView1 erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.""
Sourcecode:
VB.NET-Quellcode
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- BackgroundWorker1.RunWorkerAsync()
- End Sub
- Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
- For i As Integer = 1 To 20
- ListView1.Items.Add(i)
- Next
- End Sub
- End Class
Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Matix Media“ ()
-
Dann zitiere ich mich mal selbst:
xChRoNiKx schrieb:
Um von einem anderen Thread auf die GUI zuzugreifen musst du "Invoken" das wäre dein Stichwort zum suchen.
Habe mal die mühe für dich übernommen:
docs.microsoft.com/de-de/dotne…e?view=netframework-4.7.2
Desweiteren ist es nicht besser System.Threading.Thread zu verwenden anstatt den Backgroundworker? (mal die Frage an andere) -
xChRoNiKx schrieb:
Desweiteren ist es nicht besser System.Threading.Thread zu verwenden anstatt den Backgroundworker?
Grüße#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
-
"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
An sich geht es aber jetzt habe ich einen Fehler, und zwar trägt er in die ListView nur einmal 9 ein und sonst nur 21...
-
Was genau soll „er“ denn eintragen?"Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
-
Matix Media schrieb:
For i As Integer = 1 To 20
ListView1.Items.Add(i)
NextAdd
-Methode nimmt einen Integer.
Grüße#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da -
-
-
Kein Problem:
VB.NET-Quellcode
- Option Strict On
- Public Class Form1
- Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
- BackgroundWorker1.RunWorkerAsync()
- End Sub
- Private Sub BackgroundWorker1_DoWork(sender As Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
- For i As Integer = 1 To 20
- 'ListView1.Items.Add(i)
- BeginInvoke(Sub() ListView1.Items.Add(i.ToString))
- Next
- End Sub
- End Class
Gruß, Matix -
Hast du denn mal irgendwas ernsthaft gelesen hier?
@Trade empfhielt dir "Option Strict On" zu machen.
Dann lies dir doch auch mal das durch was dir deine IDE anzeigt. Da wird sicherlich etwas angezeigt nachdem du Option Strict On gemacht hast.
Und dann kannst du anhand des Fehlers darauf schließen was du falsch machst.
(Als SideNote: .Add nimmt einen String keinen Integer also musst du den Integer zu einem String machen z.b.) (Das hat Trade aber auch schon geschrieben).
EDIT//Ok sein Post kam zusammen mit meinem also hat er wenigsten da mal geschaut.
Was funktioniert nun nicht?
-
Also ich würde mal versuchen ein ListViewItem dort einzufügen statt einem Integer."Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."
Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
Wie man VisualStudio nutzt? => VisualStudio richtig nutzen -
@xChRoNiKx Vielen Danke für deine Information, darauf bin ich aber schon selber gekommen. Hat trotzdem nicht Funktioniert, den Sourcecode habe ich oben gepostet.
Und es würde mich freuen wenn wir ganz normal und mit Respekt vor dem anderem schreiben könnten
Grüße, Matix
Edit:
Was er mir sagt wenn ich über "i" hover ist: Die Verwendung einer Interationvariablen in einem Lambdaausdrück kann zu unerwarteten Ergebnissen führen. -
Gut @Matix Media was zeigt dir denn die IDE an?
Also wenn ich deinen Code bei mir reinkopiere zeigt mir die IDE schon die Lösung:
Also wäre jetzt die Frage ob du deine IDE richtig liest oder ob das eine Einstellungssache ist das er mir anzeigt wie man es beheben kann., -
-
Ich wäre weiterhin für async await. Da musst Du Dich dann nicht mit Invoken rumärgern, wenn nicht alles grade in ein
Task.Run
gewrappt ist. BGW und EAP sind imho längst schon überholt. Wobei ich mich eh frage, wozu Du das da asynchron machst. Oder ist das nicht alles von der Methode?
Auf jeden Fall würde ich hier ehe eher zuEnumerable.Range
und derAddRange
-Methode greifen.
Grüße#define for for(int z=0;z<2;++z)for // Have fun!
Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose!
Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da
-
Tags
-
Ähnliche Themen
-
Berbatov - - Sonstige Problemstellungen
-
joniator11 - - Sonstige Problemstellungen
-
4 Benutzer haben hier geschrieben
- Matix Media (12)
- mrMo (6)
- xChRoNiKx (5)
- Trade (4)