tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
6
ZUGRIFFE
783
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    OliWan OliWan ist offline Mitglied Bronze
    Registriert seit
    Aug 2003
    Ort
    Schwerte
    Beiträge
    39
    Hi Coders!

    Ich braucht dringend mal einen Tipp:

    Ich habe ein WinForm gebaut, dass aus einem Verzeichnis Bilder lädt und
    diese einzeln in einer PictureBox anzeigt. Hierzu gibt es ein Menu, um mit
    dem angezeigtem Bild bestimmte Dinge zu machen, z.B. Speichern unter...

    Das klappt alles soweit - nun aber meine Frage:

    Es kommen unregelmäßig neue Bilder in dieses Verzeichnis und ich möchte
    die Methode loadimages im aktiven Winform irgendwie von extern her
    aufrufen. Geht das in C# überhaupt?

    Hope for help
    ObiWan
     

  2. #2
    Registriert seit
    Mar 2001
    Ort
    München
    Beiträge
    4.785
    Zitat Zitat von OliWan
    Hi Coders!
    Es kommen unregelmäßig neue Bilder in dieses Verzeichnis und ich möchte
    die Methode loadimages im aktiven Winform irgendwie von extern her
    aufrufen. Geht das in C# überhaupt?
    Wieso öffnest du nicht einfach ein Thread der selbständig nach n-Sekunden
    den Ordner checkt?
     
    Erst wenn der letzte Programmierer eingesperrt...
    ...und die letzte Idee patentiert ist, werdet ihr merken, dass Anwälte nicht programmieren können.
    -------------------
    chris: hey Tom hast du eigentlich ne Freundin
    jdar: ich bin tutorials.de Mod!

  3. #3
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Schau dir mal unter den Komponenten den FileSystemWatcher an. Den kannst auf ein Verzeichnis legen und es wird ein Event ausgelöst, sobald sich etwas im Verzeichnis ändert, oder was hinzukommt, oder wie auch immer - ist einstellbar.

    Das ist genau das was du brauchst.
     

  4. #4
    OliWan OliWan ist offline Mitglied Bronze
    Registriert seit
    Aug 2003
    Ort
    Schwerte
    Beiträge
    39
    Danke für die TIPPS !

    Das mit dem Filewatcher ist schon OK - aber hier habe ich folgendes Problem:

    Programm A bekommt Daten per USB und baut daraus eine Grafik.
    Programm B zeigt die erstellten Grafiken an.

    Dummerweise kommen ständig "Nachträge" zu schon vorhandenen Grafiken, also
    Erweiterungen zu schon vorhandenen Graphen. Mein Programm A ist immer
    abgebrochen, wenn Programm B gerade das Bild anzeigte, das es gerade updaten wollte.



    Deshalb habe ich eine Methode bebastelt, die nach dem Update die Grafiken in ein
    TMP Verzeichnis kopiert. Auf dieses greife ich dann zu und zeige diese Tmpgrafiken an.

    Kommen nun neue Updates, muß die Anzeige in Programm B auf "bilder werden geladen" gesetzt werden, die neuen Grafik müssen ins TMP Verzeichnis kopiert werden und dann
    soll die aktuelle ImageListe bzw. das Bilder-Array neu gefüllt werden.


    Nun hatte ich gedacht, dass ich diese Methode (sie heißt loadimages()) extner aufrufe, wenn das update abgeschlossen ist. Dabei soll keine neue Instanz meines WinForm aufgerufen werden, sondern die laufenden, wenn eine da ist, soll die Methode durchführen?!

    Ich hoffe es ist klar geworden?! und vor allem hoffe ich, dass es hierfür einen Weg gibt.

    Vieleicht bin ich vorher schon falsch abgebogen

    Hope for help thx coders!
    OliWan
     

  5. #5
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Naja, du kannst ja die Assembly des Viewers per Reflection einbinden und so einfach steuern und halt die Anzeige entsprechend anpassen, stoppen, neu starten oder wie auch immer.

    Wobei du das (meiner Ansicht nach) ein wenig kompliziert angehst.

    Ich hätte hier eine Anwendung mit zwei Threads. Der eine Thread checkt USB, der andere Thread zeigt an. Dann hast du alles innerhalb einer Anwendung.
     

  6. #6
    OliWan OliWan ist offline Mitglied Bronze
    Registriert seit
    Aug 2003
    Ort
    Schwerte
    Beiträge
    39
    mmm OK - geht das auch im Winform?

    Hier habe ich folgendes in der Main[]

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    
    static void Main()
            {
              Process instance = RunningInstance();
             if (instance == null)
                     {
     
                Application.Run(new WinForm());
                }else{
                HandleRunningInstance(instance);
     
                }
            }
     
            public static Process RunningInstance()
     {
     Process current = Process.GetCurrentProcess();
     Process[] processes = Process.GetProcessesByName (current.ProcessName);
     
     //Loop through the running processes in with the same name
     foreach (Process process in processes)
     {
     //Ignore the current process
     if (process.Id != current.Id)
     {
     //Make sure that the process is running from the exe file.
     if (Assembly.GetExecutingAssembly().Location.Replace("/", "\\") ==
     current.MainModule.FileName)
     {
     //Return the other process instance.
     return process;
     }
     }
     }
     
     //No other instance was found, return null.
     return null;
     }
    public static void HandleRunningInstance(Process instance)
     {
     //Make sure the window is not minimized or maximized
     ShowWindowAsync (instance.MainWindowHandle , WS_SHOWNORMAL);
     
     //Set the real intance to foreground window
     SetForegroundWindow (instance.MainWindowHandle);
     
     
     }
     
     [DllImport("User32.dll")]
     private static extern bool ShowWindowAsync(IntPtr hWnd, int cmdShow);
      [DllImport("User32.dll")] private static extern bool
     SetForegroundWindow(IntPtr hWnd);
     private const int WS_SHOWNORMAL = 1;

    Nun hatte ich gehofft, dass man, nachdem man eine laufende Instanz gefunden hat, mit
    z.b. process.loadimages(); diese Methode in dem laufendem Prozeß aufrufen kann.

    OliWan...
     

  7. #7
    OliWan OliWan ist offline Mitglied Bronze
    Registriert seit
    Aug 2003
    Ort
    Schwerte
    Beiträge
    39
    .... ich komm da irgendwie nicht weiter -
    deshalb habe ich die Instanzprüfung aus dem WinForm rausgeworfen.

    Bevor ich nun diese Form aufrufe, prüfe ich ob es schon einen Prozeß gibt der
    bereits läuft:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
     string RunningInstance()
     {
       String ergebnis ="no";
       System.Diagnostics.Process[] myProcesses;
       myProcesses =
          System.Diagnostics.Process.GetProcessesByName("frontend");
     
     
       foreach (System.Diagnostics.Process instance in myProcesses)
       {
          ergebnis="yes";
       }
     
     return ergebnis;
     }

    -> Wenn ein yes zurück kommt will ich dann die Methode loadimages() in der laufenden Instanz aufrufen.

    Ich habe mich mit Invoke und delegat beschäftigt, aber ich steige da nich durch

    Bitte gibt es jemanden, der weis ob das überhaupt geht und wenn ja wie?

    Danke für eure Geduld
    OliWan
     

Ähnliche Themen

  1. Antworten: 4
    Letzter Beitrag: 11.03.10, 12:51
  2. Flash fernsteuern
    Von bluewing im Forum Flash Plattform
    Antworten: 2
    Letzter Beitrag: 19.10.08, 00:04
  3. Website fernsteuern
    Von radschu im Forum PHP
    Antworten: 1
    Letzter Beitrag: 01.10.08, 17:47
  4. PC fernsteuern
    Von Freak2k im Forum Netzwerke
    Antworten: 7
    Letzter Beitrag: 11.05.05, 12:28
  5. PC fernsteuern
    Von Moleman im Forum Netzwerke
    Antworten: 4
    Letzter Beitrag: 23.08.04, 10:38