Hahne Geschrieben 5. Dezember 2008 Geschrieben 5. Dezember 2008 Hallo, ich habe ein kleines Problem. Und zwar bin ich gerade dabei einen Portscanner zu programmieren was soweit auch klappt. Jedoch habe ich z.Z. das Problem, dass die Anwendung einfriert solange das Programm am scannen ist. Die Methode für den Portscan liegt in der selben Klasse wie die OnLoad-Methode von meinem Programm (sprich: ich habe keine ausgelagerte Klasse) und ich muss der Methode insgesamt drei Parameter übergeben. Ich habe schon folgendes versucht: * ParameterizedThreadStart * normalen Threadaufruf * Methode ausgelagert, Getter und Setter erstellt für die Parameter und versucht über den Thread das Objekt zu übergeben. Leider verstehe ich das Thema Threading nicht so ganz. Könntet ihr mir da weiterhelfen oder habt ihr andere Ideen wie ich das lösen könnte damit das Programm nicht einfriert? Achja, das Problem beim Auslagern in eine andere Klasse ist die, dass ich aus der Methode noch auf eine Progressbar zugreife. Da habe ich es bisher auch noch nicht hinbekomme auf eine Progressbar oder anderes aus einer fremden Klasse zuzugreifen. Wäre super wenn ihr mri weiterhelfen könntet! Zitieren
Guybrush Threepwood Geschrieben 5. Dezember 2008 Geschrieben 5. Dezember 2008 Wie du ja schon rausgefunden hast lässt sich das per Multithreading lösen. Die einfachste Möglichkeit dazu unter .Net bietet im Moment der Backgroundworker. Das ist ein unsichtbare Control den du auf deine Form ziehen kannst und womit du einfach einen zweiten Thread laufen lassen kannst. Auf die Controls in deiner Form (Progressbar) kannst du nicht einfach so aus einem anderem Thread zugreifen, das musst du per Invoke lösen. Wenn du mal nach den beiden Dingen suchst solltest du genügend Beispiele finden Zitieren
Hahne Geschrieben 5. Dezember 2008 Autor Geschrieben 5. Dezember 2008 Ok vielen Dank ich werde mal ein wenig danach googlen! Zitieren
Hahne Geschrieben 8. Dezember 2008 Autor Geschrieben 8. Dezember 2008 So das mit dem Backgroundworker habe ich hinbekommen nur verstehe ich nicht ganz wie ich jetzt mit Invoke meine Progressbar ansprechen kann. Ich hatte schon nach "C# invoke" gegoogelt aber diese Artikel die dort dann erscheinen sidn nicht ganz klar für mich. Könntet ihr mir weiter helfen? Zitieren
Guybrush Threepwood Geschrieben 8. Dezember 2008 Geschrieben 8. Dezember 2008 Klar http://forum.fachinformatiker.de/net/113207-event-c-net-2-0-a.html Zitieren
Hahne Geschrieben 8. Dezember 2008 Autor Geschrieben 8. Dezember 2008 Sorry aber ich versteh es nicht. Ich möchte doch z.B. lediglich auf ein Label oder so zugreifen können und dann sagen können meinLabel.Text = "Hier mein Text"; aber ich verstehe nicht warum da "new DisplayResultDelegate(DisplayResult),Text)" u.s.w. steht. Ich möchte ja nicht einfach nur kopieren sondern auch verstehen! Und ich greife daraus aus dem Event "backgroundWorker1_DoWork" zu. Zitieren
Guybrush Threepwood Geschrieben 8. Dezember 2008 Geschrieben 8. Dezember 2008 Weil du ein Control nur aus dem Thread verändern kannst der es erstellt hat. Also musst du per Invoke diesen Thread dazu bringen das für dich zu erledigen und dazu benötigt der einen Methodenzeiger (Delegate) auf eine Methode die das macht. Zitieren
Hahne Geschrieben 8. Dezember 2008 Autor Geschrieben 8. Dezember 2008 Und der erste Wert den ich in den Klammern nach Invoke eingebe ist meine Methode die es für mich regelt und der zweite Wert ist dann jeweils z.B. mein Text oder wenn ich eine Progressbar hab meine Integerzahl? Zitieren
Guybrush Threepwood Geschrieben 8. Dezember 2008 Geschrieben 8. Dezember 2008 Der erste Parameter ist ein Delegate auf eine Methode und die darauf folgenden die Parameter welche auch immer diese Methode verlangt. Zitieren
Hahne Geschrieben 8. Dezember 2008 Autor Geschrieben 8. Dezember 2008 Hmm, keine Ahnung ob ich zu doof dafür bin aber ich versteh es nicht. Wie ich Pointer hasse Zitieren
Hahne Geschrieben 9. Dezember 2008 Autor Geschrieben 9. Dezember 2008 Ok hat sich erledigt. Hab es hinbekommen. Wer nachlesen möchte wie ich es gemacht habe kann das hier tun: Hahne.NET : Progressbar im Backgroundworker ansprechen Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.