fdh*_*fdh 4 c# loops structure
我正在使用Visual C#sand我使用的是Windows窗体而不是控制台应用程序.因此,我不是在Main()中工作,而是在Form File中工作.我对C#也很陌生,所以如果我的一些问题是愚蠢的,那就很抱歉.
我基本上需要做的是当我的程序启动时我需要它来永远循环.因为我没有Main(),所以我会把这段代码放在哪里?我把它放在有InitializeComponent()的函数中吗?我需要在程序启动后立即启动循环.但是,我需要在循环之前首先声明一些变量.所以基本上我需要声明变量然后开始无限循环.变量是全球性的.
其次,当用户按下按钮时,我需要无限循环中断.我该怎么做?我在考虑以下几点:
while (buttonIsPressed == false)
{
//do whatever I need to do
}
Run Code Online (Sandbox Code Playgroud)
但是,我意识到按钮的功能永远不会被调用,因为我被困在那个循环中.如果由于处于无限循环中而从未到达按钮的功能,我无法从按钮的功能设置变量.有任何想法吗?我在思考线程,但我对线程没有任何经验,所以我有点不愿意尝试它.
聊天应用程序.程序启动时我需要它继续听.但是,当用户单击"连接"时,它会停止侦听,而是启动连接
我正在创建一个聊天客户端.所以基本上当我的程序启动时,我需要它继续听.但是,当用户单击"连接"时,它需要停止侦听,而是启动连接
Mzn*_*Mzn 10
对于那些来自(完全)不同背景的人来说,这是一个自然的问题.
编程Windows窗体应用程序是事件驱动的.当Windows窗体应用程序启动时,会加载一个窗体(检查Program.cs文件),并且有一个隐藏的主循环,专注于程序中的重要事项.
您不需要在Main循环中放置任何内容来响应事件(如按钮单击事件).您只需通过为Button的Click事件创建事件处理程序来处理按钮单击事件.您可以使用设计器或在代码中手动执行此操作.
当您创建一个处理事件的方法时(因此该方法称为事件处理程序),在引发/触发事件时会自动调用它.例如,当用户单击按钮时,将调用表单上Button的Click事件的方法处理程序.
此MSDN主题包含您需要的所有信息:在Windows窗体中创建事件处理程序.如果您需要更多说明,请询问!:)
更新:像上面一样创建一个事件处理程序,并在Form_Loaded事件处理程序中创建一个循环.一定要调用Application.DoEvents(); 在循环内.这样就可以处理按钮单击的事件处理程序(在处理程序中添加代码以修改将使循环条件为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();
}
Run Code Online (Sandbox Code Playgroud)
最后,考虑使用BackgroundWorker,它封装为您创建和管理线程.