我用多线程做了一个打字游戏源代码如下
 private void timer1_Tick(object sender, EventArgs e)
        {
            Label l = new Label();
            l.AutoSize = true;
            r = new Random();
            l.Left = r.Next(0, this.Width);
            l.Font = new System.Drawing.Font("Arial", 12F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
            l.Name = "label1";
            l.Top = 20;
            int i1 = 0;
            for (int i = 0; i < 100000; i++)
            {
                i1 = 65 + r.Next(57);
                if (i1 >= 91 && i1 <= 96)
                {                }
                else
                {
                    break;
                }
            }
            l.Text = l.Text = Convert.ToChar(i1).ToString();            this.Controls.Add(l);
           MoveLabel m=new MoveLabel(l);
            Thread thread = new Thread(new ThreadStart(m.Move));
            thread.Start();
}
 public class MoveLabel
  {
  //私有成员,Label标签
  Label _label;  //随机数对象,用来控制label的位置,即在X轴上的位置
  Random _rand = new Random();  /// <summary>
  /// 读写属性,对标签的设置与获取
  /// </summary>
  public Label Label
  {
  get
  {
  return this._label;
  }
  set
  {
  this._label = value;
  }
  }  /// <summary>
  /// 参数化构造方法
  /// </summary>
  /// <param name="label">标签</param>
  public MoveLabel(Label label)
  {
  this._label = label;
  }  #region 可删除的测试代码  ///// <summary>
  ///// 参数化构造方法重载1
  ///// </summary>
  ///// <param name="panel">整个Panel作为参数来传递</param>
  //public MoveLabel(Panel panel)
  //{
  // this._panel = panel;
  //}
  #endregion  #region 测试代码  /// <summary>
  /// 移动标签的方法
  /// </summary>
  public void Move()
  {
  //声明一个随机对象,用来作为lable的位置随机
  // _rand = new Random();  if (this._label != null)
  {
  while (true)
  {
  //让label向下落
  this._label.Top += 3;
    
  //测试,让_lable的横坐标随意变化
  this._label.Left = _rand.Next(0, 590);  //让线程休眠100毫秒
  Thread.Sleep(100);  if (this._label.Top == 450)
  {
  this._label = null;
  //关闭当前线程,因为lable已经被删除,这里是为了释放资源
  Thread.CurrentThread.Abort();
  }
  }
  }
  else
  {
  //关闭当前线程,因为lable已经被删除,这里是为了释放资源
  Thread.CurrentThread.Abort();
  }
  }  #endregion  }
线程间操作无效: 从不是创建控件“多线程打字游戏”的线程访问它。
public void Move()
  {
  //声明一个随机对象,用来作为lable的位置随机
  // _rand = new Random();  if (this._label != null)
  {
  while (true)
  {
  //让label向下落
  this._label.Top += 3;
错误地点
  Thread.Sleep(100);还有我感觉这个是休眠主线程的我想要休眠当前线程的应该怎么写,高手指点啊

解决方案 »

  1.   

    //关闭当前线程,因为lable已经被删除,这里是为了释放资源
      Thread.CurrentThread.Abort();
    自己都说了  关闭当前线程
    那你就休眠就是啦!!
      

  2.   

    线程间操作无效: 从不是创建控件“多线程打字游戏”的线程访问它。用委托Thread.Sleep(100);休眠当前线程
      

  3.   

    楼上的委托好用是还用可惜有一个问题,我就他妈郁闷了,我用委托以后确实能给他赋值了但是我要写一个循环再方法里,没走一下休眠0.1秒或者1秒,但是我看见的效果不是移动休眠,而是创建控件的timer被休眠了。