您可以使用 Microsoft Visual C# .NET 或 Microsoft Visual C# 来编写多线程应用程序。本文介绍如何使用一个简单的 Visual C# 应用程序来创建和管理线程。
要求
下面列出了推荐使用的硬件、软件、网络基础设施以及所需的 Service Pack:
- Microsoft Windows 2000、Microsoft Windows XP 或 Microsoft Windows Server 2003
- Microsoft Visual C# .NET 或 Microsoft Visual C# 2005
本文假定您熟悉下列主题:
- Visual C# 编程
- Visual Studio .NET 集成开发环境 (IDE) 或 Visual Studio 2005 IDE
创建包含线程的 Visual C# 应用程序
- 启动 Microsoft Visual Studio .NET、Microsoft Visual Studio 2005 或 Microsoft Visual C# 2005 速成版。
- 新建一个名为 ThreadWinApp 的 Visual C# Windows 应用程序项目。
- 向窗体中添加一个“按钮”控件。默认情况下,此按钮名为“Button1”。
- 向窗体中添加一个“ProgressBar”组件。默认情况下,此进度栏名为“ProgressBar1”。
- 右键单击该窗体,然后单击“查看代码”。
- 将以下语句添加到该文件的开头:
- 为“Button1”添加以下“Click”事件处理程序:
private void button1_Click(object sender, System.EventArgs e)
{
MessageBox.Show("This is the main thread");
} - 将以下变量添加到“Form1”类中:
- 将以下方法添加到“Form1”类中:
private void ThreadTask()
{
int stp;
int newval;
Random rnd=new Random();
while(true)
{
stp=this.progressBar1.Step*rnd.Next(-1,2);
newval = this.progressBar1.Value + stp;
if (newval > this.progressBar1.Maximum)
newval = this.progressBar1.Maximum;
else if (newval < this.progressBar1.Minimum)
newval = this.progressBar1.Minimum;
this.progressBar1.Value = newval;
Thread.Sleep(100);
}
} 注意:这是线程的底层代码。此段代码是一个无限循环,它随机增加或减小“ProgressBar1”中的值,然后等待 100 毫秒后再继续。 - 为“Form1”添加以下“Load”事件处理程序。此段代码将新建一个线程,使该线程成为后台线程,然后启动该线程。
private void Form1_Load(object sender, System.EventArgs e)
{
Thread trd = new Thread(new ThreadStart(this.ThreadTask));
trd.IsBackground = true;
trd.Start();
}
确认它可以使用
- 生成并运行该应用程序。请注意,“ProgressBar1“中的值会随机更改。这是新线程在起作用。
- 要演示主线程独立于更改“ProgressBar1”值的线程,请单击窗体上的按钮。会出现一个对话框,其中显示下面的错误消息:
等待输入。请注意,“ProgressBar1”中的值会不断更改。
疑难解答
在更复杂的应用程序中,请确保在访问共享变量时同步多个线程。有关详细信息,请参阅 Visual C# .NET 联机帮助文档中的“lock”语句和相关主题。
有关详细信息,请访问下面的 Microsoft 网站或参阅 .NET Framework SDK 文档:
文章编号: 815804 - 最后修改: 2007年12月21日 - 修订: 2.7
这篇文章中的信息适用于:
- Microsoft Visual C# .NET 2002 标准版
- Microsoft Visual C# .NET 2003 标准版
- Microsoft ADO.NET 1.0
- Microsoft Common Language Runtime (included with the .NET Framework) 1.0
- Microsoft Visual C# 2005 Express Edition
| kbnamespace kbthreadsync kbthread kbhowtomaster KB815804 |
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。