有关定时器的使用及多线程的问题。

强其骨 2011-07-28 09:05:47
一个函数内部分成三个主要的模块
{
//模块1
//这里想实现的是先暂停5秒钟再接着执行下面的语句

//模块2

//模块3
}



模块1执行完后,我想用C#去实现每隔一秒钟执行一次输出,一个执行5秒,5秒过后再执行下面的语句。我用Thread.Sleep(5000)//也就是说不用输出也可以,但需要5秒过后再执行下面的语句。

然后发现整个窗口都假死了,所以想问下大家应该怎样去解决这问题呢。Timer的话好像只能每隔一定的时间去执行一个函数,却停止不下来,而多线程的话又不是很熟悉。

大家有什么想法吗? 谢谢。
...全文
68 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
Angus9 2011-07-29
  • 打赏
  • 举报
回复
按我的理解 下面应该可以实现,不过这样子 好像有点

private void MyFunction()
{
DispatcherTimer timer = new DispatcherTimer();
//1秒输出
timer.Interval = TimeSpan.FromSeconds(1);
timer.Tick += (t, tic) =>
{
//
//输出代码
//

Thread thread = new Thread((() =>
{
//等待5秒
Thread.Sleep(5000);

//Model2

//Model3

}));

//后台线程
thread.IsBackground = true;

thread.Start();
};

timer.Start();
}
Angus9 2011-07-29
  • 打赏
  • 举报
回复
每隔一秒钟执行一次输出,一个执行5秒,5秒过后再执行下面的语句

不大明白的你表述 需要的话加我QQ吧 117568522
强其骨 2011-07-29
  • 打赏
  • 举报
回复
每次遇到的问题总是窗口假死。
强其骨 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 leeyear2005 的回复:]
多线程吧

Thread thread = new Thread((() =>
{
Thread.Sleep(5000);
//非UI动作写在Dispatcher.Invoke外面
App.Current.Dispatcher.Invoke(new Action(() =>
{
//做你想做的UI动作
}));
}));

//后……
[/Quote]

主窗口还是会假死。。
强其骨 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 leeyear2005 的回复:]
以上是WPF 的哈 winform的话 不需要Dispatcher 只需XX.Invoke
[/Quote]
什么是UI动作呢?
日晞Pisces 2011-07-28
  • 打赏
  • 举报
回复
试一试可等待计时器
强其骨 2011-07-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 leeyear2005 的回复:]
以上是WPF 的哈 winform的话 不需要Dispatcher 只需XX.Invoke
[/Quote]

我是用WPF实现的,先尝试一下。
Angus9 2011-07-28
  • 打赏
  • 举报
回复
以上是WPF 的哈 winform的话 不需要Dispatcher 只需XX.Invoke
Angus9 2011-07-28
  • 打赏
  • 举报
回复
多线程吧

Thread thread = new Thread((() =>
{
Thread.Sleep(5000);
//非UI动作写在Dispatcher.Invoke外面
App.Current.Dispatcher.Invoke(new Action(() =>
{
//做你想做的UI动作
}));
}));

//后台线程
thread.IsBackground = true;

thread.Start();

110,535

社区成员

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

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

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