对于来自(完全)不同背景的人来说,这是一个自然的问题。
Windows 窗体应用程序编程是事件驱动的。当 Windows 窗体应用程序启动时,会加载一个窗体(检查 Program.cs 文件),并且有一个隐藏的主循环,让您可以专注于程序中的重要内容。
您不需要在主循环中放置任何内容来响应事件(例如按钮单击事件)。您只需通过为按钮的 Click 事件创建事件处理程序来处理按钮单击事件。您可以使用设计器或在代码中手动执行此操作。
当您创建一个方法来处理事件(因此该方法称为事件处理程序)时,它会在引发/触发事件时自动调用。例如,当用户单击按钮时,将调用表单上按钮的 Click 事件的方法处理程序。
此 MSDN 主题包含您需要的所有信息:在 Windows 窗体中创建事件处理程序。如果您需要更多说明,请询问! :)
UPDATE:像上面一样创建一个事件处理程序,并在 Form_Loaded 事件处理程序中创建一个循环。一定要打电话应用程序.DoEvents(); inside循环。这样,可以处理按钮单击的事件处理程序(在处理程序中添加代码来修改布尔值,该布尔值将使循环的条件为 false 以取消循环)。
更新2:为了使这个答案更加完整,我提到您还应该考虑在新线程而不是 UI 线程上运行循环(因此避免需要使用 DoEvents,正如我的同行指出的那样,它有其缺点)。以下示例显示如何创建线程并在单击按钮时取消它:
System.Threading.Thread t;
private void Form1_Load(object sender, EventArgs e)
{
//create and start a new thread in the load event.
//passing it a method to be run on the new thread.
t = new System.Threading.Thread(DoThisAllTheTime);
t.Start();
}
public void DoThisAllTheTime()
{
while (true)
{
//you need to use Invoke because the new thread can't access the UI elements directly
MethodInvoker mi = delegate() { this.Text = DateTime.Now.ToString(); };
this.Invoke(mi);
}
}
private void button1_Click(object sender, EventArgs e)
{
//stop the thread.
t.Suspend();
}
最后,考虑使用后台工作者它为您封装了创建和管理线程。