0

こんにちは、私はまだ回避できない古いスレッドに似た問題を抱えています ( 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";                                 
    }
4

1 に答える 1

0

コードが MessageBox.Show ステートメントに到達するまでにタイマーが期限切れになることはほとんどありません。

myTimer.Start() と MessageBox.Show() の間に Thread.Sleep(1000) 呼び出しを配置し​​てみてください。これにより、タイマーが経過して DisplayTimeEvent ハンドラーを実行する時間が与えられます。

最終的には、System.Timer.Timer クラスがそのコールバックをバックグラウンド スレッドで実行するという事実を考慮する必要があるため、DisplayTimeEvent で行った変更を同期する必要があります。

于 2013-10-06T13:44:23.390 に答える