C#从Elapsed Time Event获取返回值

时间:2013-10-06 13:37:15

标签: c# event-handling return-value elapsedtime

嗨我有一个类似的问题,一个旧的线程,我仍然无法解决 (Pass a return value back through an EventHandler)。我最终试图实现一个计时器,它将以均匀的间隔计算速度,所以我需要经过时间事件来返回某种值。我尝试过使用全局变量,但事件似乎没有改变变量。有什么建议?提前谢谢!

namespace Timer_Label
{
public static class GlobalVariables
{
    public static int _stringHolder;

    public static int StringHolder
    {
        get { return _stringHolder; }
        set { _stringHolder = value; }
    }
}

    public partial class Form1 : Form
   {
    public Form1()
    {
        InitializeComponent();

        System.Timers.Timer myTimer = new System.Timers.Timer();
        myTimer.Elapsed += new ElapsedEventHandler(DisplayTimeEvent);
        myTimer.Interval = 500;
        myTimer.Start();


        MessageBox.Show(Convert.ToString(GlobalVariables.StringHolder));
    }

  public static void DisplayTimeEvent(object sender, ElapsedEventArgs e)
    {   
        GlobalVariables.StringHolder = "1";                                 
    }

1 个答案:

答案 0 :(得分:0)

在代码到达MessageBox.Show语句时,计时器将过期是不可能的。

尝试在myTimer.Start()和MessageBox.Show()之间调用Thread.Sleep(1000)。这应该给定时器时间并执行你的DisplayTimeEvent处理程序。

最终,您需要考虑System.Timer.Timer类在后台线程中执行其回调的事实,因此您需要同步在DisplayTimeEvent中进行的更改。