我对编程很新,所以任何帮助都将在船上进行,我试图让我的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();
}
答案 0 :(得分: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%,试图尽可能快地运行循环。
答案 1 :(得分:0)
回调发生,但很可能CreateTable方法抛出异常。异常的原因是该方法尝试更改gui对象。为了改变这样的对象,你必须在gui线程上。您需要查找的是Dispatcher,以及如何分派回调。
通过向计时器回调方法添加try-catch并进行调试来验证,或者将异常写入日志文件或类似文件。