从c#中的不同线程启动一个计时器

Swa*_*ati 13 c# multithreading timer visual-studio-2008

嗨我已经陷入了一些与计时器相关的问题.希望有人可以帮忙..

  1. 我有一个包含按钮的窗体
  2. 当我点击该按钮时,我启动参数化线程
Thread thread1 = new Thread(new ParameterizedThreadStart( execute2));
thread1.Start(externalFileParams);
Run Code Online (Sandbox Code Playgroud)
  1. 线程内的代码执行得很好
  2. 在这个线程的最后一行,我启动一个计时器

.

public void execute2(Object ob)
{
    if (ob is ExternalFileParams)
    {
        if (boolean_variable== true)
          executeMyMethod();//this also executes very well if condition is true
        else
        {
            timer1.enabled = true;
            timer1.start();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

5但是没有触发计时器的tick事件

我正在研究VS2008 3.5框架.我已经从工具箱拖动计时器并将其设置Interval为300也试图设置Enabledtrue/false方法timer1_Tick(Object sender , EventArgs e)但是它没有被解雇

任何人都可以建议我做错了什么?

Gab*_*iel 18


您可以尝试以这种方式启动计时器:

添加表单构造函数:

System.Timers.Timer aTimer = new System.Timers.Timer();
 aTimer.Elapsed += new ElapsedEventHandler(OnTimedEvent);
 // Set the Interval to 1 second.
 aTimer.Interval = 1000;
Run Code Online (Sandbox Code Playgroud)

将此方法添加到Form 1:

 private static void OnTimedEvent(object source, ElapsedEventArgs e)
 {
   //do something with the timer
 }
Run Code Online (Sandbox Code Playgroud)

按钮点击事件添加:

aTimer.Enabled = true;
Run Code Online (Sandbox Code Playgroud)

此计时器已经过线程化,因此无需启动新线程.


321*_*21X 7

MatíasFidemraizer说的确如此.但是,有一个工作......

如果您的表单上有一个可调用的控件(例如状态栏),则只需调用该控件即可!

C#代码示例:

private void Form1_Load(object sender, EventArgs e)
{
    Thread sampleThread = new Thread(delegate()
    {
        // Invoke your control like this
        this.statusStrip1.Invoke(new MethodInvoker(delegate()
        {
            timer1.Start();
        }));
    });
    sampleThread.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    MessageBox.Show("I just ticked!");
}
Run Code Online (Sandbox Code Playgroud)