为什么程序中加了System.Threading.Timer后运行不长时间,整个程序停止了。

nongfuxu 2015-01-08 11:04:05
急救:为什么程序中加了System.Threading.Timer后运行不长时间,整个程序停止了。
代码如下:

using System.Threading;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
private System.Threading.Timer timer;
private int num=0;
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
timer = new System.Threading.Timer(new TimerCallback(Time_Elapsed), this, 0, 10000);
}

void Time_Elapsed(object sender)
{
string n;
n = num.ToString();
textBox1.Text = "n";//
num++;
timer.Change(Timeout.Infinite, 1000);
}
}
}


...全文
444 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
於黾 2015-01-08
  • 打赏
  • 举报
回复
timer.Change(Timeout.Infinite, 1000); 之后重新执行一下timer.start试试
nongfuxu 2015-01-08
  • 打赏
  • 举报
回复
可以运行了。 不过我发现,在 void Time_Elapsed(object sender)中设置断点,程序只有第一次运行到断点时停止下来,然后就不会在断点处停止了。

        void Time_Elapsed(object sender)
        {
            string n;
            n = num.ToString();
//此处设置了断点,不过程序没有停止下来。      
      Console.Out.WriteLine(DateTime.Now + " " + DateTime.Now.Millisecond.ToString() +  n);
           //textBox1.Text = "n";//
           num++;
           timer.Change(Timeout.Infinite, 1000);
        }
nongfuxu 2015-01-08
  • 打赏
  • 举报
回复
那么,用 Console.Out.WriteLine(DateTime.Now + " " + DateTime.Now.Millisecond.ToString() + "timer in:"); 应该可以正常运行了。 我试试
wmg494005678 2015-01-08
  • 打赏
  • 举报
回复
跨线程访问UI控件导致,使用 Control.Invoke
啊拉丁的鱼 2015-01-08
  • 打赏
  • 举报
回复
跨线程调用控件,是非线程安全的,要用委托的方式
江南小鱼 2015-01-08
  • 打赏
  • 举报
回复
TimerCallback,不在创建计时器的线程上执行,而是在系统提供的 ThreadPool 线程上执行。 所以TimerCallback访问textBox1控件,是跨线程访问,是不允许的!
於黾 2015-01-08
  • 打赏
  • 举报
回复
或者你这种简单应用,不处理复杂或耗时逻辑,直接用Forms.Timer(或从工具箱里拖一个出来)就好,那个是委托给UI执行的,可以直接在回调函数里给文本框赋值
於黾 2015-01-08
  • 打赏
  • 举报
回复
System.Threading.Timer是线程 你要更新UI,需要使用委托
nongfuxu 2015-01-08
  • 打赏
  • 举报
回复
引用
timer.Change(Timeout.Infinite, 1000); 之后重新执行一下timer.start试试
好的

110,536

社区成员

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

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

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