带有延迟C#的无限循环

时间:2017-03-17 10:19:44

标签: c# visual-studio

由于某种原因,我的程序正在退出

public async void Update()
{
    short cooldown = 0;
    Console.WriteLine("Update function");
    do
    {
        if (secretKey >= 3 && cooldown == 0)
        {
            MessageBox.Show(getGUID(), "Kiosk ID");
            cooldown = 9;
        }

        if (cooldown > 0)
            cooldown--;

        if (secretKey > 0)
            secretKey--;

        await Task.Delay(2000);
    } while (true);
}

出于这个:

public Kiosk()
{
    Init();
    Update();
    hook();

    //  _urlRequestWorker = new Thread(Update);
    // _urlRequestWorker.Start();
}

正在调用“更新功能”WriteLine。这是最初被调用的函数:

[STAThread]
static void Main()
{
    bool exists = System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1;
    if (!exists)
    {
        Kiosk k = new Kiosk();
    }
    else
    {
        MessageBox.Show("One instance of Kiosk is already running");
        Logs.saveLogs("Couldn't start instance of Kiosk because it's already running");
        Environment.Exit(0);
    } 
}

主要功能

Thread.Sleep

我不知道为什么它会自动退出,我可以使用def my_view(request): ob = MyModel.objects.get(pk=1) print ob.html # "<div> Description <span> number </span>" return render(request,'page.html',{'ob':ob}) ,但我想连接一个键盘按键监听器来向我显示一个消息框。

2 个答案:

答案 0 :(得分:4)

您对Update()的调用没有阻止:您正在开始通话,但您仍需要等待它。

从构造函数中删除对Update()的调用,然后......

#include <stdio.h>
#define VAR(End) cc##End // ## does token concatenation inside a pp macro

int main(void) {
    int ccc = 9;
    printf("hell loo %d", VAR(c));
    return 0;
}

顺便说一下,你应该通过一个名为Mutex的对象来强制执行单个实例:你使用的方法不能保证工作。

答案 1 :(得分:0)

好吧所以这解决了问题

     public Kiosk()
    {
        Init();
        hook();
        var updateTask = Update();
        updateTask.Wait();
    }




      public async Task Update()
        {           
         do
         {
            //CODE HERE
             await Task.Delay(5000);
         } while (true);
        }