自定义控件引用了数据表但没有跨线程更新

时间:2015-06-09 12:38:59

标签: c# multithreading

我有一个我创建的自定义控件,当一切都是单线程时它正在工作。在我将其发送到界面之前,它会使用第一条消息进行更新。

我有一个数据表:

            DataTable dtNew = new DataTable(szTableName);  // to add into a dataset later
            dtNew.Columns.Add("EventDate",typeof(string));
            dtNew.Columns.Add("Function",typeof(string));
            dtNew.Columns.Add("IsError",typeof(bool));
            dtNew.Columns.Add("LongMessage",typeof(string));
            dtNew.Columns.Add("Message",typeof(string));
            dtNew.Columns.Add("Process",typeof(string));
            dtNew.Columns.Add("RecID",typeof(string));
            dtNew.Columns.Add("Thread",typeof(string));
            dtNew.Columns.Add("UserName", typeof(string));
            ProcessStatus NewPanel = new ProcessStatus(); // create custom control
            NewPanel.SetDataSource(ref dtNew); // sets the datasource to the datatable
            dsLogs.Tables.Add(dtNew); // add datatable into dataset

自定义控件接收数据源,因此应绑定:

public partial class ProcessStatus : UserControl
{

    public ProcessStatus()
    {
        InitializeComponent();

    }

    public void SetProcess(string szProcName)
    {
        lblProcess.Text = "Process: " + szProcName;
    }

    public void SetThread(string szThreadName)
    {
        lblThreadNum.Text = "Thread: " + szThreadName;
    }

    public void SetDataSource(ref DataTable dtTable)
    {
        dgvProcess.DataSource = dtTable;

        dgvProcess.Columns["EventDate"].Visible = false;
        //dgvProcess.Columns["Function"].Visible = false;
        dgvProcess.Columns["IsError"].Visible = false;
        dgvProcess.Columns["LongMessage"].Visible = false;
        //dgvProcess.Columns["Message"].Visible = false;
        dgvProcess.Columns["Process"].Visible = false;
        dgvProcess.Columns["RecID"].Visible = false;
        dgvProcess.Columns["Thread"].Visible = false;
        dgvProcess.Columns["UserName"].Visible = false;
        dgvProcess.Columns["Function"].Width = 80;
        dgvProcess.Columns["Message"].Width = 200;
    }

    // only show first line
    private void dgvProcess_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
    {
        if (dgvProcess.RowCount > 0)
            dgvProcess.FirstDisplayedScrollingRowIndex = dgvProcess.RowCount - 1;
    }

}

使用新消息更新数据表时,该消息不会在自定义控件中更新(在数据网格中)。再次,这确实在单线程上工作,所以我可能没有做正确的事情来允许它更新crossthreads或类似的东西......

0 个答案:

没有答案