Process.Start(...) vs. Shell(...)

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 27 Antworten in diesem Thema. Der letzte Beitrag () ist von Snaptu.

    Radinator schrieb:

    Ich soll eine Liste von ...
    Vergiss die Console, nimm eine WinForm-Anwendung.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also den Aufruf/Ping Code nicht in ein Modul, sondern in eine Form reinschreiben?
    Aber wie kann ich das dann parallel laufen lassen? Ich kann doch die Form nur ein einziges mal aufrufen (Form2.Show()).
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    Ich kann doch die Form nur ein einziges mal aufrufen
    Die Console doch auch.
    Schreib mal bitte eine vollständige Aufgabenstellung, damit wir wissen, was alles bedacht werden muss.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie wärs mit n Log-Files?(n = Anzahl der anzupingenden Rechner) dann starteste einfach n Threads die exakt das gleiche machen, und jut ist.
    Pinge xy an, Hole PingResult,schreibe PingResult in log z, Schreibe PingResult in label w, wiederhole.
    Dass die Threads Milisekunden von einander getrennt starten ist eh egal, das wird sich mit den verschiedenen Latenzen wioeder aufheben.

    ODER:
    Den IP Scanner von @ErfinderDesRades ansehen :D

    Edit: dass man nicht mehr benachrichtigt wird, wenn schon geschrieben wurde...

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „EaranMaleasi“ ()

    Also ich habs jetz so gemacht, dass ich in meinem Hauptprogramm statt des Process.Start(..) global threadWork as New Work(), und Dim newThread as new Thread(AdressOf threadWork.Sender) geschrieben und dann in Class Work einmal den New Konstruktor und die sender(...) Sub drinnen. Wenn ich auf den Starte Button klicke zieht er mir die IPs aus der Liste raus, speichert sie in einer List. Diese Liste arbeite ich per For Each ab und übergebe dem myThread.Start(para) mit dem Parameter para die Werte.

    So weit so gut, er macht keine Fehler, schreibt mir auch alles richtig weg. Nur wenn ich das Programm beende und neu starten will, bekomme ich ein Fehlermeldung mit dem Worten "Kann keinen Neuen Prozess starten, bevor nicht der alte beendet wurde". Dachte mir, ja gut is klar, wenn ich den Thread nicht beende, dann kann ich keinen neuen starten...war mein erster Gedanke. Der zweite war: Warte mal...wenn ich das Programm beende, dem der Thread zugeordnet ist, warum "läuft" dann der Thread/ die Threads noch?.

    Dritter war dann: Schau doch ma auf MSDN evtl gibt es da ja eine Funktion zum Beenden...gibt es auch (Thread.Suspend()). ABER: Laut MSDN ist diese Funktion veraltet...ka was das heißen soll. Kann ich da dann auch die Funktion Abort() hernehmen oder muss ich das ganz anders machen? Bzw wenn ich ja 8x myThread.Start(para) aufrufe, ich mein des is ja nicht so wie wenn ich mit Process.Start(para) einen Prozess starte, dass ich den dann auch auswählen und beenden kann. Wie kann ich dann einen ganz bestimmten Thread ansprechen (um ihn zu beenden)?
    In general (across programming languages), a pointer is a number that represents a physical location in memory. A nullpointer is (almost always) one that points to 0, and is widely recognized as "not pointing to anything". Since systems have different amounts of supported memory, it doesn't always take the same number of bytes to hold that number, so we call a "native size integer" one that can hold a pointer on any particular system. - Sam Harwell

    Radinator schrieb:

    bevor nicht der alte beendet wurde
    Weil der Thread noch läuft.
    Beende den Thread, er sollte es "freiwillig" tun, also setz ein Flag, das dem Thread sagt, dass er sich beenden soll.
    Einen Thread mit dem Holzhammer zu beenden ist ein No Go.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Naja, das Zauberwort ist Multi-Threading mit dem du dich befassen musst. Du könntest dir z.b. ein Datagridview machen das so aussieht.

    Datum/Uhrzeit
    Ziel1
    Ziel2
    20140416_0957
    OK
    OK
    20140416_1000
    OK
    Failed
    20140416_1200
    Failed
    OK
    20140413_1300
    OK
    OK

    Diese Daten kannst du dann Zeilenweise in eine XML schreiben lassen zur Anzeige benutzt du die Datagridview.
    Oder wie @EaranMaleasi schon sagt nur die Konsolenanwendung. Dort gibt es sicher auch eine gute möglichkeit alles mitzulesen was passiert.
    Wer fragt, ist ein Narr für eine Minute. Wer nicht fragt, ist ein Narr sein Leben lang.