将基于时间运行的无限循环



我对编程还很陌生,所以任何帮助都会被采纳,我正试图让我的CreateTable每2秒运行一次,但当我点击按钮执行InitRoop时,什么都没发生,我尝试了各种不同的事情,但都没能成功运行。

    private void CreateTable()
    {            
        //Set the number of columns and rows
        int tblColumns = 20;
        int tblRows = 50;
        //Create the table
        Table tbl = new Table();
        tbl.CssClass = "table";
        //Add table
        PlaceHolder1.Controls.Add(tbl);
        Random RandomNumber = new Random();
        for (int i = 0; i < tblRows; i++)
        {
            TableRow tr = new TableRow();
            for (int j = 0; j < tblColumns; j++)
            {
                TableCell tc = new TableCell();
                int Range = RandomNumber.Next(1, 99);
                tc.Text = Range.ToString();
                //Add Columns
                tr.Cells.Add(tc);
            }
            //Add Rows
            tbl.Rows.Add(tr);
        }
        return;
    }
    System.Timers.Timer myTimer = new System.Timers.Timer();
    private void InitLoop(bool runLoop)
    {
        while (true)
        {
            try
            {
                myTimer.Elapsed += myTimer_Elapsed;
                myTimer.Interval = 2000;
                myTimer.Enabled = true;
                myTimer.Start();
            }
            catch (Exception f)
            {
                //handle the exception 
            }
        }
    }
    private void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
    {
        CreateTable();
    }

计时器就是您所需要的。无限循环正在快速重置计时器,所以什么也没发生。

private void InitLoop(bool runLoop)
{
    try
    {
        myTimer.Elapsed += myTimer_Elapsed;
        myTimer.Interval = 2000;
        myTimer.Enabled = true;
        myTimer.Start();
    }
    catch (Exception f)
    {
        //handle the exception 
    }
}

通常情况下,你不希望一个没有某种thread.sleep()命令的无限循环,因为它也会使CPU达到100%,试图尽可能快地运行循环。

会发生回调,但CreateTable方法很可能会抛出异常。出现异常的原因是该方法试图更改gui对象。为了改变这样一个对象,你必须在gui线程上。您需要查找Dispatcher,以及如何调度回调。

通过向计时器回调方法和调试添加try-catch进行验证,或者将异常写入日志文件或类似文件。

相关内容

  • 没有找到相关文章

最新更新