0

私はプログラミングにかなり慣れていないので、助けが必要です。CreateTableを2秒ごとに実行しようとしていますが、ボタンをクリックしてInitLoopを実行しても何も起こりません。さまざまなことを試しましたが、まだ行っていませんこれを正常に機能させることができます。

    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();
    }
4

2 に答える 2

1

タイマーはあなたが必要とするすべてです。無限ループはタイマーを急速にリセットしているため、何も起こりません。

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% に駆動するためです。

于 2013-08-31T21:29:48.947 に答える
0

コールバックが発生しますが、最も可能性が高いのはメソッド CreateTable が例外をスローすることです。例外の理由は、メソッドが GUI オブジェクトを変更しようとしたためです。このようなオブジェクトを変更するには、GUI スレッドにいる必要があります。調べる必要があるのは Dispatcher と、コールバックをディスパッチする方法です。

タイマー コールバック メソッドに try-catch を追加して確認し、デバッグするか、例外をログ ファイルなどに書き込みます。

于 2013-08-31T21:55:56.233 に答える