c# timer控件的tick事件能在后台运行吗?即我想用程序算某个东西,当时间为一秒时停止。

我buttonclick事件用dowhile(判断时间time小于1秒),time为全局变量,被tick事件控制。怎么程序一直运行停止不了啊,是不是进入click事件后t... 我buttonclick事件用dowhile(判断时间time小于1秒),time为全局变量,被tick事件控制。怎么程序一直运行停止不了啊,是不是进入click事件后tick事件就停止运行了 展开
 我来答
freeeeeewind
2013-10-17 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1349万
展开全部
1)Timer控件的Tick事件处理函数不是后台运行,而是在与窗体相同的线程中运行
2)在button_Click事件函数中,启用一个后台线程。这个后台线程执行1秒后就退出
3)你在button_Click事件中使用do while 循环,在循环期间窗体“卡住了”,所以进入不了Tick事件。
追问
大侠能否简单的写几句启用后台线程的代码?
追答

1)在程序开始处添加 

using System.Threading;

2)在程序中添加一个函数,这个函数用作后台线程处理函数

void MyThreadFun()
{
   //在函数里添加你要执行的操作
}

3)在button_Click事件处理中添加

private void button1_Click(object sender, EventArgs e)
{
    //启动一个后台线程
    Thread t = new Thread(MyThreadFun);
    t.IsBackground = true;
    t.Start( );
}
Aupryyyyyyyyyy
2013-10-17 · TA获得超过1636个赞
知道大有可为答主
回答量:1574
采纳率:53%
帮助的人:954万
展开全部
没错,正是因为 Timer 计时器是在 UI 主线程中进行计时的,所以,要么就是在一个新线程里用 Timer 计时;要么用 System.Threading.Timer 来计时;
但是问题在于,如果一个方法不是在 UI 线程中执行,那么基于安全原因,无法直接修改 UI 上任何控件的值;但所有控件的基类 Control 提供了一个 Invoke 方法,可以让你在其他线程中调用这个方法,把要执行方法的委托给它,就能让它在 UI 线程上执行任何操作了。

System.Threading.Timer countingTimer = new System.Threading.Timer(() => {
到了时间所要执行的代码体
....
});

// 开始计时
countingTimer.Change(1000, Timeout.Infinite); // 如果不希望计时器会反复计时,第二个参数需要设置为 Timeout.Infinite
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式