我有一个使用其他类的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和主线程的调用就可以了。
任何想法?
答案 0 :(得分:3)