Howdy, Stranger!

It looks like you're new here. If you want to get involved, click one of these buttons!

Sign In with Facebook Sign In with Google Sign In with OpenID

Categories

We have migrated to a new platform! Please note that you will need to reset your password to log in (your credentials are still in-tact though). Please contact lee@programmersheaven.com if you have questions.
Welcome to the new platform of Programmer's Heaven! We apologize for the inconvenience caused, if you visited us from a broken link of the previous version. The main reason to move to a new platform is to provide more effective and collaborative experience to you all. Please feel free to experience the new platform and use its exciting features. Contact us for any issue that you need to get clarified. We are more than happy to help you.

gui in c#

michaeldunemichaeldune Posts: 103Member
hi i have gui with two buttons

button1 button2

when i press button1 the programs starts loop

for (;)
dosomthing(var)

i want to press button2 and then that var will be changed the problem is during the run the button 2 seems locked i want to press several time button2 and see thing changing
should i define somthing about button2 or for the gui

thanks

Comments

  • VanilleBertVanilleBert Posts: 29Member
    : hi i have gui with two buttons
    :
    : button1 button2
    :
    : when i press button1 the programs starts loop
    :
    : for (;)
    : dosomthing(var)
    :
    : i want to press button2 and then that var will be changed the problem is during the run the button 2 seems locked i want to press several time button2 and see thing changing
    : should i define somthing about button2 or for the gui
    :
    : thanks
    :

    As long as a loop is looping, the program will not respond, because the eventmessage loop(the code which handles MouseClick etc.; automatic generated) can't continue looping. You have to give your program time to react on events.

    I always use a Timer based loop:
    - declare the variables used in the "for"-loop as privates of the Form.
    - put the "dosomthing"-code in the Timer_Tick

    If the "dosomthing"-code needs no much time and you have to run the loop fast, you can also put the "dosomthing"-code between a "timestoper"-loop:

    [code]
    object var = GIVEmeTHEstartVAR(); // your var classwide available

    Timer.Interval = 1; // choose like you want

    void Button1_Click()
    {
    // start and stop the loop
    if(Timer.Enabled)
    Timer.Stop();
    else
    Timer.Start();
    }

    void Button2_Click()
    {
    // change var even while loop is looping
    var = GIVEmeAotherVAR(var);
    }

    void Timer_Tick()
    {
    // "timestoper"-loop, ends than "dosomething"-code ran enough for this step( 50 ms )
    DateTime DT = DateTime.Now;
    while((DateTime.Now - DT).TotalMilliseconds < 50)
    {
    DOsomething(var);
    DOevenMORE();
    }
    // the loop step ends and the program can respond to other events, like Button1_Click, Button2_Click or Form_Close
    // After Timer.Intervall-Milliseconds the Timer_Tick is going to run again
    }
    [/code]

    Maybe there is a more elegant or difficult(multithreading) method, but this works and is fast.
Sign In or Register to comment.