[英]Infinite loop that will run based on a time
我是編程新手,所以將為您提供任何幫助,我試圖讓我的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();
}
計時器就是您所需要的。 無限循環正在快速重置計時器,因此沒有任何反應。
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進行驗證並進行調試,或者將異常寫入日志文件或類似文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.