public class CLASS
{
public CLASS(){}//有一个普通的类 CLASS, 包含一个窗体类 FORMCLASS
FORMCLASS f;//还有一个时间属性,用于设置退出时间
publuc DateTime outTime
{
    set { outTime = value; }
}//用一个方法显示窗体
public void SHOW()
{
    f = new FORMCLASS();
    f.Show();//并启动一个线程,修改窗体标题
    Thread t = new Thread(new ThreadStart(ChangeTitle));
    t.Start();}
protected void ChangeTitle()
{
//对象锁
lock(outTime) 
{
    DateTime outTime = DateTime.Now.AddMinute(3); //三分钟后退出
    while (DateTime.Now <= outTime)
    {
         f.Text = DateTime.Now.ToString(); //修改窗体标题
    }
  f.Close(); //关闭窗体实例,释放所有占用资源
}
}
}上面是问题的模拟, 保证可以正常运行的现在这样调用肯定会出问题,单如果只调用一边,则没有任何问题
CLASS C = new CLASS(); 
for (i=5; i<10; i++)
{
    DateTime out = DateTime.New.AddMinute(i); //分别是 5、6、7、8、9(分钟)5个时间
 
  //我的意思是如何执行完一个,例如先是(5分钟的),在启动一个6分钟的(这是其实内部是个新的窗体实例)
  C.outTime = out; 
  C.Show(); //而不是一次全部启动,虽然线程lock了。
  //如果不用线程,则自动排队一个一个执行,但是窗体死掉了,所以必须用线程
  //我想排队一个一个执行,该怎么做?
}这个问题很绕,不一定描述的清楚,有正确答案另开100分

解决方案 »

  1.   

    更正:线程中的语句因该是这样
    lock(outTime) 
    {
        while (DateTime.Now <= outTime)
        {
             f.Text = DateTime.Now.ToString(); //修改窗体标题
        }
      f.Close(); //关闭窗体实例,释放所有占用资源

      

  2.   

    谢谢  tujaping我上面的时间属性只是为了演示说明线程需要执行一段时间,假设一个修改窗体标题的任务其实并不知道真正的任务执行多少时间. 也就无法定
      

  3.   

    你的lock所用的参数有问题,必须是引用类型,而outTime为值类型。用Mutex包一层或者进行装箱操作。
      

  4.   

    哦,谢谢了,Knight94(愚翁) 大哥看的仔细啊上面的例子是随手敲的伪代码(不好意思,没有说明把大家误导了,我下次注意), 实际代码锁的是个对象,由于太多不好整理,根据意思敲出简要的伪代码+注解想让大家给个解决方案.这样写本来就有点"我偏要"写法, 不管是lock还是Mutex都对性能是个大折扣,我换了方法已经解决了,截贴吧.