none
timer里事件触发,返回后继续执行问题 RRS feed

  • 问题

  • 我有一个timer,其中出发了个显示图片的事件,然后有一个按钮,当按钮按下可继续执行timer里面的后半段程序。

    或者把timer改成thread也可以,应该比较好。请问如何实现?


    :)Ex
    2010年12月27日 6:46

答案

  • dear
    1.没错,Timer是从头开始执行,所以才讲你如果用Timer需要记住目前的状态,等下次要执行时在从那个状态开始。

    2.有关Thread的用法,不是三言两语就能搞懂的,建议你先往这方面下手。在执行绪里运行的方法,有点像循环那样,只要你没叫执行绪停下来,他就会不段的执行,若你是要polling一个设备,你可用Sleep来占停Thread,跟Timer感觉有点像,但他门俩又是不同的运作。
    http://blog.miniasp.com/post/2009/03/08/Multi-Threading-in-CSharp-Learning-Resources.aspx
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    • 已建议为答案 Neddy Ren 2010年12月31日 2:13
    • 已标记为答案 Neddy Ren 2011年1月13日 7:20
    2010年12月28日 5:19

全部回复

  • dear
    实在是看不懂你的用语,不晓得你要问啥,请问您可以在写清楚一点吗?
    若是有关Thread的用法你可参考

    [C#.NET] 如何 使用 BackgroundWorker 多執行緒 / 跨執行緒 存取UI
    http://www.dotblogs.com.tw/yc421206/archive/2009/02/15/7174.aspx

    [C#.NET] 如何 使用 多執行緒 Thread / 跨執行緒 存取UI
    http://www.dotblogs.com.tw/yc421206/archive/2009/02/13/7141.aspx

    若图挡很大你若决定要用Timer也行,建议可以使用
    System.Timers.Timer
    System.Threading.Timer

    不要用
    System.Windows.Forms.Timer
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月27日 8:18
  • 就是timer里面判断,如果判断成立如何暂停timer,等待button点击后继续执行timer当时停下来的那个断点以后的程序。


    :)Ex
    2010年12月28日 1:03

  • dear
    你可用Stop()方法,占停Timer,但是你要记住你在哪里停下,用执行绪(Thread)占廷WaitHandle可以省掉这步骤
    http://hi.baidu.com/daijun2007/blog/item/16b54b3b1f137be615cecb85.html
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    2010年12月28日 2:38
  • Hi Ex.Shen:

    欢迎来到MSDN论坛!

    根据您的描述,我建议您考虑使用多线程来解决这个问题。在线程里可以挂起(Suspend)和继续已挂起(Resume)的线程。
    希望这能给您提供一个解决的思路。

    Best Regards
    • 已建议为答案 Neddy Ren 2010年12月31日 2:15
    2010年12月28日 3:01
  • 如果通过thread的话,我如何做到定期去运行这个thread?还是会用到timer,用timer的stop,再重新start,他会从timer的最开始处执行程序,不是在暂停的地方运行之后的程序。
    :)Ex
    2010年12月28日 3:55
  • void OnTimer(...)

    {

          xxxxxxx;

          btn.click += delegate(){yyyyyyy;}

    }

    2010年12月28日 4:38
  • dear
    1.没错,Timer是从头开始执行,所以才讲你如果用Timer需要记住目前的状态,等下次要执行时在从那个状态开始。

    2.有关Thread的用法,不是三言两语就能搞懂的,建议你先往这方面下手。在执行绪里运行的方法,有点像循环那样,只要你没叫执行绪停下来,他就会不段的执行,若你是要polling一个设备,你可用Sleep来占停Thread,跟Timer感觉有点像,但他门俩又是不同的运作。
    http://blog.miniasp.com/post/2009/03/08/Multi-Threading-in-CSharp-Learning-Resources.aspx
    秘訣無它,唯勤而已 http://www.dotblogs.com.tw/yc421206/
    • 已建议为答案 Neddy Ren 2010年12月31日 2:13
    • 已标记为答案 Neddy Ren 2011年1月13日 7:20
    2010年12月28日 5:19
  • 算了,还是暂停后的那段程序丢到button事件里面去处理。。。
    :)Ex
    2010年12月29日 0:36