求助!! .net 线程、方法、类基础

aSalt 2006-07-30 03:09:46

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分
...全文
144 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aSalt 2006-07-31
  • 打赏
  • 举报
回复
谢谢 tujaping

我上面的时间属性只是为了演示说明线程需要执行一段时间,假设一个修改窗体标题的任务

其实并不知道真正的任务执行多少时间. 也就无法定
aSalt 2006-07-31
  • 打赏
  • 举报
回复
哦,谢谢了,Knight94(愚翁) 大哥看的仔细啊

上面的例子是随手敲的伪代码(不好意思,没有说明把大家误导了,我下次注意),

实际代码锁的是个对象,由于太多不好整理,根据意思敲出简要的伪代码+注解想让大家给个解决方案.

这样写本来就有点"我偏要"写法, 不管是lock还是Mutex都对性能是个大折扣,

我换了方法已经解决了,截贴吧.
Knight94 2006-07-31
  • 打赏
  • 举报
回复
你的lock所用的参数有问题,必须是引用类型,而outTime为值类型。

用Mutex包一层或者进行装箱操作。
tujiaping 2006-07-30
  • 打赏
  • 举报
回复
我的第一个想法就是定时器,不过不确定
aSalt 2006-07-30
  • 打赏
  • 举报
回复
更正:线程中的语句因该是这样
lock(outTime)
{
while (DateTime.Now <= outTime)
{
f.Text = DateTime.Now.ToString(); //修改窗体标题
}
  f.Close(); //关闭窗体实例,释放所有占用资源

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧