none
我可以实现循环 ,怎么停止 async await 的无限循环 下面是代码 F8 F9 是快捷键, F8 开始 F9 停止 RRS feed

  • 问题

  •    async void kh_OnKeyDownEvent(object sender, KeyEventArgs e)

            {        
                if (e.KeyData == (Keys.F8)) { await Delay1000Async(); }//
                if (e.KeyData == (Keys.F9)) { await Delay1000Async(); }// 这里肯定是不对的,怎么改? 是不是再写一个东西?
            }
            
            static async Task Delay1000Async()
            {
                await Task.Delay(1000);
                SendKeys.Send("e");
               
                await Task.Delay(1000);
                SendKeys.Send("r");
             
                    await Delay1000Async(); //实现无限循环
              
               
            }
    2017年1月12日 19:09

答案

  • Hi ning050089,

    我认为你应该加一个static变量在无限等待函数体里面,通过static变量的记忆性,当F9按下的时候,让static 变量等于1,if语句判断失败,跳出无限循环。

    伪代码:

    run()

    {

    if(static ==1) break;

    else

    {

    //死循环

    while(1)

    }

    }

    在你按下key键的时候,把static 变量的状态变一下。就可以

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ning050089 2017年1月14日 3:59
    2017年1月13日 2:49
    版主
  • 参考问题连接

    https://social.msdn.microsoft.com/Forums/zh-CN/fb365cec-f2d1-4cab-afa0-57392c3712d4?forum=visualcshartzhchs

        if (e.KeyData == (Keys.F8)) { Float = 0; Run(); }//开始
                if (e.KeyData == (Keys.F9)) { Float = 1; }//停止

     public static int Float;

            public static async void Run()
            {
                while (true)
                {
                    if (Float == 1)
                    {
                        break;

                    }
                    else
                    {
                        await Delay1000Async();
                    }
                }

            }


    2017年1月14日 4:00

全部回复

  • Hi ning050089,

    我认为你应该加一个static变量在无限等待函数体里面,通过static变量的记忆性,当F9按下的时候,让static 变量等于1,if语句判断失败,跳出无限循环。

    伪代码:

    run()

    {

    if(static ==1) break;

    else

    {

    //死循环

    while(1)

    }

    }

    在你按下key键的时候,把static 变量的状态变一下。就可以

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    • 已标记为答案 ning050089 2017年1月14日 3:59
    2017年1月13日 2:49
    版主
  • 参考问题连接

    https://social.msdn.microsoft.com/Forums/zh-CN/fb365cec-f2d1-4cab-afa0-57392c3712d4?forum=visualcshartzhchs

        if (e.KeyData == (Keys.F8)) { Float = 0; Run(); }//开始
                if (e.KeyData == (Keys.F9)) { Float = 1; }//停止

     public static int Float;

            public static async void Run()
            {
                while (true)
                {
                    if (Float == 1)
                    {
                        break;

                    }
                    else
                    {
                        await Delay1000Async();
                    }
                }

            }


    2017年1月14日 4:00