使用无限循环来创建自动更新程序

时间:2010-07-13 13:35:14

标签: c# loops infinite-loop

解决: 你们是最棒的! 我使用goyouidiot_Click的内容并将其转换为名为displayResult的方法,然后:

 private void t1_TextChanged(object sender, EventArgs e)
       {
        displayResult();
       }

我以前怎么想不到?大声笑,thx

这是原始信息:

  

没有人在前我构建了一个小软件   计算出15的过分   数字。代码开始运行时   点击了buttun,但我想   把这段代码放在一个无限循环中   开始用程序运行,所以   答案将自动更新。这是   我的代码:

private void goyouidiot_Click(object sender,
     

EventArgs e)               {       。       。       。       。               }

     

和那些不理解的人:

     
    

我有15个文本框,我想要     文本框'时运行的方法'     内容变化。

  

4 个答案:

答案 0 :(得分:9)

不是进行无限循环(这将导致应用程序挂起,除非它在后台线程上 - 更大的蠕虫),你应该只响应变化事件。

如果您的数字正在文本框中更新,只需将每个数据的TextChanged事件绑定到您的goyouidiot_Click方法 - 然后您应该重命名。

修改

正如埃里克在他的回答中指出的那样,这些事件起作用的原因是因为事实上在后台有一个无限循环来监听变化 - Windows消息泵。当您在应用程序上调用Run方法时,将启动此循环。

答案 1 :(得分:3)

你必须参与无限循环的直觉是正确的。但你不想自己写那个循环;运行时库已经为您编写了它。您想要阅读的是事件驱动编程。找一个好的介绍,比如说:

http://www.c-sharpcorner.com/UploadFile/sksaha/EventsinNet11152005043514AM/EventsinNet.aspx

事件驱动编程在幕后工作的方式是存在无限循环的代码,用于监视来自操作系统的消息队列的状态。消息代表鼠标点击和键入等内容。无限循环代码然后将这些消息转换为事件触发。您可以收听那些事件发生并在特定事件发生时运行代码。

答案 2 :(得分:2)

将其置于无限循环中可能会使系统的CPU功率匮乏,这意味着您需要引入暂停(Thread.Sleep)。

如果您使用暂停,也可以使用Timer对象 - 基于表单Timer或基于帖子的Timer System.Windows.Forms或{ {1}} / System.Threading);

我个人建议使用计时器以所需的间隔打勾。

线程计时器使用委托/线程池,而基于表单的计时器将消息放在消息泵上 - 由于创建节拍的方式的开销,两者都不能保证准确到它们的间隔。

答案 3 :(得分:0)

如果我理解正确(你希望在Winform应用程序中每15分钟更新一次),那么最好使用Timer类,它将定期运行你的代码。

编辑:如果要在其中一个文本框中更改文本时执行某些计算,则应在事件处理程序中为这些文本框的TextChanged事件执行此操作(您要分配每个文本框都有相同的处理程序)