Eigenes WindowsEvent erstellen?



  • Hallo,

    Ich habe ein Probelm,
    ich habe eine Funktion die ich so offt aufrufen will wie nur möglich. Ich kann sie aber nicht in einen eigenen Thread stecken.
    Und wenn die Funkion einfach immer wieder sich selber aufruft friert natürlich das Programm ein.

    Also wollte ich ein eigenes Event erstellen, dass die Funktion immer los sendet, wenn sie Fertig ist, und dass ganz normal in die Eventwarteliste meines Programms angehängt wird. Und dieses Event sollte dann wieder die besagte Funktion starten. So müssten auch die anderen normalen Events der Gui abgearbeitet werden.

    Ich hoffe ihr versteht mich und könnt mir helfen!

    Danke sehr!



  • So wie du das vorhast, ist es nicht möglich, da du nicht in einem Thread gleichzeitig Messages erstellen und abfangen kannst.

    So wie ich dich verstehe, willst du deine Funktion so oft wie möglich aufrufen.
    Evtl. könntest du dafür diese Funktion an das Ereignis 'Application.Idle' hängen, d.h. immer wenn deine Anwendung in den Ruhezustand überwechseln will, ruft sie deine Funktion auf.

    Warum kannst du denn keinen eigenen Thread erstellen?
    Unter VS NET.2005 kannst du dafür bequem den BackgroundWorker verwenden.



  • Weil ich in der Funktion mit Selbsgebastelten LinkedList arbeite. Und wenn ich da an zwei Stellen gleichzeitig drauf zugreife und Bearbeite, kann und wird das zu Problemen führen. Deswegen wollte ich ebend immer Funktion ausführen--Messages bearbeiten--Funktionausführe--Messages...wenn ich nun in der Funktion und bei der Eventbehandlung auf die Linkedlist zugreife ist das nicht so toll.



  • Dann lockst du einfach deine Schreibzugriffe auf die LinkedList in dem einen Thread.

    Schau einfach mal in dem Namespace 'System.Threading' nach, dort sind einige geeignete Klassen, z.B. Monitor, Mutex oder ReaderWriterLock.



  • Nagut, danke sehr!
    Werde mich informieren.



  • Das sollte doch hervorragend mit Threads klappen.
    Du kannst die Funktion in einem Thread starten und den Threadstatus in einem anderen Thread abfragen. Wenn der Status nicht mehr "Running" ist, kannst du davon ausgehen dass die Funktion fertig ist und erneut loslegen 🙂

    wenn ich dich richtig verstanden habe


Anmelden zum Antworten