C# 从外部计时器刷新数据网格 Class

C# refresh datagrid from a external Timer Class

我尝试从外部计时器刷新数据网格视图Class每次我尝试这个我都会出现错误:线程综合不允许

Form1.cs:

public void Main_Window_Load(object sender, EventArgs e)
    {


        SetDatagridView();            

    }

 public void SetDatagridView()
    {
        DataTable MBServices = new DataTable();
        DataView MBServicesVW = new DataView();

        MBServices = getMasterServicetblOverview("8");
        MBServices.Columns.Add("State", typeof(Image));

        MBServices.Columns.Remove("state");
        MBServicesVW = new DataView(MBServices);
        dataGridSHToverview.DataSource = MBServicesVW;
    }

Timer.cs:
  class Timer
{
    public class NamedTimer : System.Timers.Timer
    {

    }

    public static void TimerDo()
    {

            Timer timer = new Timer();
            timer.Interval =  (60000);
            timer.Elapsed += Main_Tick;
            timer.AutoReset = false;
            timer.Start();
    }

    public static void Main_Tick(object sender, EventArgs args)
    {
            //there a want to call SetDatagridView()       
    }     
}

timerDo() 将在 master 中调用 Class.

感谢您对我们的帮助

我建议你使用事件模式。

示例代码:

/// TimerManager class
public class TimerManager
{

    public void TimerDo()
    {
        Timer timer = new Timer();
        timer.Interval = (60000);
        timer.Elapsed += Main_Tick;
        timer.AutoReset = false;
        timer.Start();
    }

    public void Main_Tick(object sender, EventArgs args)
    {
        if (OnTimerManagerTick != null)
            OnTimerManagerTick(sender, args);
    }

    public delegate void TimerTick(object sender, EventArgs args);
    public event TimerTick OnTimerManagerTick;
}

///Form1 Class
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        InitDataGridView();

        TimerManager timerManager = new TimerManager();
        timerManager.OnTimerManagerTick += TimerManager_OnTimerManagerTick;
    }

    private void TimerManager_OnTimerManagerTick(object sender, EventArgs args)
    {
        InitDataGridView();
    }

    private void InitDataGridView()
    {
        List<PersonTest> personTests = new List<PersonTest>
        {
            new PersonTest{Name = "Luiz", LastName = "Oliveira", Age = 35},
            new PersonTest{Name = "Another", LastName = "Person", Age = 25},
            new PersonTest{Name = "Neymar", LastName = "Junior", Age = 28},
        };

        dgvTestDbClick.DataSource = personTests;
    }
}

public class PersonTest
{
    public string Name { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
}