⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadexample.cs

📁 多线程打字游戏,C#实现,多线程控制label向下移动
💻 CS
字号:
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Threading;

namespace ThreadTest
{
	/// <summary>
	/// ThreadExample 的摘要说明。
	/// </summary>
	public class ThreadExample : System.Windows.Forms.Form
	{
		private System.Windows.Forms.Timer timer1;
		private System.ComponentModel.IContainer components;

		private int _count = 0;

		public ThreadExample()
		{
			//
			// Windows 窗体设计器支持所必需的
			//
			InitializeComponent();

			//
			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
			//
		}

		private static void Main()
		{
			Application.Run(new ThreadExample());
		}	

		/// <summary>
		/// 清理所有正在使用的资源。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows 窗体设计器生成的代码
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{
			this.components = new System.ComponentModel.Container();
			this.timer1 = new System.Windows.Forms.Timer(this.components);
			// 
			// timer1
			// 
			this.timer1.Interval = 1000;
			this.timer1.Tick += new System.EventHandler(this.timer1_Tick);
			// 
			// ThreadExample
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
			this.BackColor = System.Drawing.Color.Black;
			this.ClientSize = new System.Drawing.Size(352, 453);
			this.Name = "ThreadExample";
			this.Text = "ThreadExample";
			this.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.ThreadExample_KeyPress);
			this.Load += new System.EventHandler(this.ThreadExample_Load);
			this.Closed += new System.EventHandler(this.ThreadExample_Closed);

		}
		#endregion

		private void ThreadExample_Load(object sender, System.EventArgs e)
		{
			timer1.Start();
			
		}

		private void timer1_Tick(object sender, System.EventArgs e)
		{
		
			Label label = new Label();
			label.Name = "Label" + _count.ToString(); 
		
			label.Width = 12;
			label.Height = 12;
			label.ForeColor = System .Drawing.Color.White;
			label.BackColor = this.BackColor;
			this.Controls.Add(label);
			System.Random random = new Random(DateTime.Now.Millisecond * DateTime.Now.Millisecond);
			label.Left = random.Next(this.Width);
	
			Letter letter = new Letter(label, this);
			ThreadStart threadStart = new ThreadStart(letter.Run);
			Thread thread = new Thread(threadStart);
			thread.Start();
		}

		private void ThreadExample_Closed(object sender, System.EventArgs e)
		{
		
		}

		private void ThreadExample_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e)
		{
			
			foreach(Label label in this.Controls)
			{
				if(label == null)
					break;
				if(label.Text[0] == e.KeyChar)
				{
					label.Dispose();
					this.Controls.Remove(label);
				}
			}
		}
	}


	public class Letter
	{
		private Label _label;
		private Form _container;
		private int _speed = 2;
		public Letter(Label label, Form container)
		{
			_label = label;
			_container = container;
			
			Random random = new Random(DateTime.Now.Millisecond);
			_speed = random.Next(5) + 1;

			_label.Text = Convert.ToChar(65 + random.Next(57)).ToString();

			switch(_speed)
			{
				case 1:
					_label.ForeColor = System.Drawing.Color.Red;
					break;
				case 2:
					_label.ForeColor = System.Drawing.Color.Yellow;
					break;
				case 3:
					_label.ForeColor = System.Drawing.Color.Blue;
					break;
				case 4:
					_label.ForeColor = System.Drawing.Color.Green;
					break;
				case 5:
					_label.ForeColor = System.Drawing.Color.White;
					break;
				default:
					_label.ForeColor = System.Drawing.Color.White;
					break;
			}
		}

		public void Run()
		{
			
			try
			{
				while(_label.Top <= this._container.Height + 100)
				{
					if(_label == null)
					{
						Thread.CurrentThread.Abort();
					}
					_label.Top += 1;
					Thread.Sleep(_speed * 5);
				
				}
				if(Thread.CurrentThread.IsAlive)
				{
					Thread.CurrentThread.Abort();
				}
			}
		
			catch(Exception ex)
			{
				Console.WriteLine("错误:" + ex.Message);
				Console.WriteLine("错误:" + ex.StackTrace);
			}
			finally
			{
				if(!_label.Disposing)
				{
					_label.Dispose();
				}
				_container.Controls.Remove(_label);
			}
		
		}

	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -