Bedienung von Combobox blockiert Rest vom Programm

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Phasenverschiebung.

    Bedienung von Combobox blockiert Rest vom Programm

    Hallo,
    folgendes Problem: Ich habe in meinem Programm comboboxen. Wenn ich diese über die Pfeil-hoch/runter Tasten mittels Mausclick bediene (zur Auswahl) dann ist es so,
    daß ein Timer (bei mir 100 ms) nicht mehr dazu kommt zu triggern. Interessanterweise geht die Prozessorlast des Programms (sowohl bei Start aus der IDE als auch bei exe)
    währen des clickens (vorallem bei mehrmaligem Clicken) bis auf null runter, d.h. alles was normalerweise im Timer verarbeitet wird, wird tatsächlich gestoppt.

    Was ist das für ein Effekt, und wie kann ich dem entgegenarbeiten?

    Danke schon mal,
    Gruß, P..
    Ich denke mal nicht, dass hier ohne Vorzeigecode vernünftig geantwortet werden kann.
    Jeder Versuch wäre ein Schuss ins blaue.
    Zeig doch einfach mal wie deine Combobox-Ereigniss-Routine und deine Timer Rückruffunktion aussieht und dann können Schlüsse gezogen werden! ^^

    Mein erster Gedanke wäre, dass du möglicherweise an einer Endlosschleife leidest.

    Edit: Natürlich leidet dein Code unter der Endlosschleife, nicht du haha! (hoffe ich mal)
    ----------------------------------------------------------------------------------------------------------------------

    Hier könnte meine Signatur stehen, aber die ist mir abfußen gekommen.

    ----------------------------------------------------------------------------------------------------------------------

    Elanda schrieb:

    Ich denke mal nicht, dass hier ohne Vorzeigecode vernünftig geantwortet werden kann.
    Jeder Versuch wäre ein Schuss ins blaue.
    Och, denke ich nicht. Hier mal n bisken Augenkrebs-verursachender Testcode. Maus zum Scrollen nötig. Dazu eine ComboBox (DropDownStyle = DropDownList) und n 100 ms-Timer.

    VB.NET-Quellcode

    1. Private Sub FrmMain_Load() Handles MyBase.Load
    2. ComboBox1.Items.AddRange(Enumerable.Range(0, 100).Select(Function(x) x.ToString).ToArray)
    3. Timer1.Start()
    4. End Sub
    5. Private Sub Timer1_Tick() Handles Timer1.Tick
    6. Me.BackColor = If(Me.BackColor = Drawing.Color.Red, Drawing.Color.Green, Drawing.Color.Red)
    7. End Sub

    Da würd ich doch mal behaupten: Da es im selbem GUI-Thread läuft, ist dieser komplett durch das Scrollen ausgelastet und kann nicht mehr den Timer bedienen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    @ Elanda:

    Es ist keine Code Sache:
    um das auszuschließen habe ich eine kleine Testapplikation quasi ohne Code, und das Problem taucht auch auf:


    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    3. Dim i As Integer
    4. For i = 1 To 50
    5. ComboBox1.Items.Add("Item_" & i.ToString)
    6. Next
    7. End Sub
    8. Private Sub Timer1_Tick(sender As System.Object, e As System.EventArgs) Handles Timer1.Tick
    9. Label1.Text = Now.ToString
    10. End Sub
    11. End Class




    @Vaporized: Da würd ich doch mal behaupten: Da es im selbem GUI-Thread läuft, ist dieser komplett durch das Scrollen ausgelastet und kann nicht mehr den Timer bedienen.

    Wenn der GUI-Thread ausgelastet ist, wie kommt es dann, daß die Leistung, die das Programm auf dem Prozessor verursacht runtergeht,
    Ist das eine andere Art Last als Rechenleistung?

    und viel wichtiger: Wie kriege ich das Problem gelöst?
    (Mein Programm steuert eine Anlage, und das Problem verursacht eine Watchdogüberwachung in der Anlage und schaltet die dann ab - ist
    also ziemlich lebenswichtig für mich!)

    kann ich zum Beispiel die Mouseclicks oder die hoch/runter Pfeile in der ComboBox deaktivieren, falls nichts anderes hilft?


    @Elanda: Edit: Natürlich leidet dein Code unter der Endlosschleife, nicht du haha! (hoffe ich mal)
    Manchmal komm ich mir schon so vor... ;)

    Code-Tag eingefügt, bitte demnächst selbst machen!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Phasenverschiebung schrieb:

    kann ich zum Beispiel die Mouseclicks oder die hoch/runter Pfeile in der ComboBox deaktivieren
    DeineComboBox.Enabled = False


    btw: bitte CodeTags verwenden
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.