嗨我有一个类似的问题,一个旧的线程,我仍然无法解决 (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";
}
答案 0 :(得分:0)
在代码到达MessageBox.Show语句时,计时器将过期是不可能的。
尝试在myTimer.Start()和MessageBox.Show()之间调用Thread.Sleep(1000)。这应该给定时器时间并执行你的DisplayTimeEvent处理程序。
最终,您需要考虑System.Timer.Timer类在后台线程中执行其回调的事实,因此您需要同步在DisplayTimeEvent中进行的更改。