Me.BeginInvoke() für ganze Form

  • VB.NET
  • .NET (FX) 4.0

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Rattenfänger.

    Me.BeginInvoke() für ganze Form

    yo Leute,

    "Hintergrundinfos"
    Ich verwende ein Control Names C1Ribbon (Menü wie in Outlook 2013, Word, etc.) vom Hersteller ComponentOne. Hier hab ich eine C1Combobox mit items welche als Toggle Button fungieren (Kann man True/False "checken"). Dies verwende ich um einen Filter in der Form zu aktivieren. Diese Combo bietet ein Event Names DropDownClosed an. Dies wird gefeuert wenn man die Combobox schließt (das Event wird ausgeführt während die Combobox aber noch geöffnet ist). Problem hierbei ist, wenn der Filter zu lange braucht um zu die Einstellungen zu übernehmen kann es passieren, dass beim Klick auf den Combobox Pfeil um die Combo zu schließen, diese gleich wieder geöffnet wird. Ok ist halt so und nun dachte ich daran den Filter halt asynchron zu erstellen.


    Mit der Methode Control.BeginInvoke kann ich da auf Eigenschaften des Steuerelements aus einem anderen Thread zugreifen. In meiner Filtermethode werden mehrere Steuerelemente verändert.
    Reicht es nun aus, wenn ich einfach die BeginInvoke Methode der Form verwende (also Me.Beginvinoke) oder muss ich das für jedes einzelne Steuerelement diese Methode aufrufen?
    Erste Tests ergaben, dass es mit Me.BeginInvoke funktioniert, wollte jedoch noch die Gewissheit haben, dass dies der richtige Weg ist.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    es ist ganz egal, von welchem Control aus .BeginInvoke aufgerufen wird.
    Denn wenn du nicht einen RiesenBockmist gebaut hast, dann sind alle Controls im selben Thread erstellt worden - und darauf kommts bei der Geschichte an.

    Die Frage ist allenfalls, wie oft du das während des Filterns treibst - manche Leute rufen das ja für jedes einzelne Daten-Item auf - dassis extrem unperformant.
    Die Controls wurden im Designer erstellt.
    Das Problem was ich einfach gehabt habe, ist dass die Combobox beim Schließen selbst die Filterung durchführt (dauert so 1,5 Sekunden). erst DANN ist die Combobox optisch geschlossen und wird komischerweise gleich wieder geöffnet.
    Nein ich rufe das ganze nur einmal auf.
    Ich filtere mittels Linq alle Daten aus und erst nachdem werden die Daten an die Controls weitergegeben.

    Wichtig für mich war einfach, dass ich mit Me.BeginInvoke arbeiten kann :)

    Danke sehr!

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hierzu habe ich eine frage?
    Denn wenn du nicht einen RiesenBockmist gebaut hast, dann sind alle Controls im selben Thread erstellt worden

    Wie kann ich Controls in einem anderem Thread erstellen, hast du ein Tutorial oder weitere Infos?