使用Winforms间隔的System.Threading.Timer的C#调用类失败

时间:2015-02-09 17:55:51

标签: c# multithreading winforms timer

我有一个使用其他类的winform应用程序(在分离的DLL中) 它看起来像:

public Form1()

    {

        foo = new Foo(2500, this.refreshGrid);
     }
    private void refreshGrid(List<int> source)
    {
        dgvDrivers.AutoGenerateColumns = true;
        dgvDrivers.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

        dgvDrivers.SynchronizedInvoke(() => dgvDrivers.DataSource = source);
        dgvDrivers.AutoResizeColumns();
     }

和扩展方法:

   public static void SynchronizedInvoke(this ISynchronizeInvoke sync,  Action action)
    {
         // If the invoke is not required, then invoke here and get out.
          if (!sync.InvokeRequired)
           {
               // Execute action.
               action();

              // Get out.
               return;
           }

           // Marshal to the required context.
          sync.Invoke(action, new object[] { });
       }

现在我有一个初始化System.Threading.Timer的类在特定时间运行一次:

public CreateTimer(int dueTime)
{
      new System.Threading.Timer(SchudleStatusChange, null, dueTime, System.Threading.Timeout.Infinite);
  }

返回UI - 每次点击都有一个按钮,调用CreateTimer()10次 但计时器被调用的次数少于我预期的次数。 我想使用winforms和主线程的调用就可以了。

任何想法?