Полосы прокрутки DataGridView, выделенные серым цветом при вызове из потока - PullRequest
0 голосов
/ 03 марта 2020

У меня есть приложение windows, написанное на C#. Я взял весь код, который (выполняет вызов restpi, строит список, помещает список в представление данных) в поток, чтобы я мог проверить поток и обновить клиента во время его работы. При этом все работает, кроме полос прокрутки серого цвета.

1 Ответ

0 голосов
/ 03 марта 2020

Есть ли проблема только с полосами прокрутки?
Если ваш код все еще находится в главном потоке, ваша форма ничего не может сделать (вам нужна двойная проверка)

Но это правда, вы можно использовать Application.DoEvents(); после завершения sh привязать данные к gridView. Этот метод остановит все потоки и обновит представление, пожалуйста, убедитесь, что это не идеальное решение, этот метод иногда будет приводить к необратимым ошибкам в условиях перекрестного потока.

В любом случае, я надеюсь использовать System.Windows.Forms.Timer, чтобы сделать это просто.
Вот пример.
После запуска формы таймер сработает 100 раз, а интервал составит 5 секунд.

private int loopCnt = 1;

// you don't need to this, just drag timer component from a "tool box"
// to your form any where at design time(mode).
// private System.Windows.Forms.Timer timer1 = new System.Windows.Forms.Timer(); 

private void Form1_Load(object sender, EventArgs e)
{
    //it is up to you start timer at form-load or triggering after some button click.
    //this.loopCnt = 1; 

    this.timer1.Enabled = true;
    this.timer1.Interval = 1000 * 5;
    this.timer1.Start();
}

private void timer1_Tick(object sender, EventArgs e)
{
    CreateDataAndBind(loopCnt++);
    if(loopCnt > 100)
    {
        this.timer1.Stop();
    }
}

public void CreateDataAndBind(int loopCount)
{
    DataSet dsTemp = new DataSet();

    #region : Define data Table and columns

    DataTable dtTemp = new DataTable();
    DataColumn dColKey = new DataColumn("key", typeof(int));
    DataColumn dColName = new DataColumn("name", typeof(String));

    dtTemp.Columns.Add(dColKey);
    dtTemp.Columns.Add(dColName);

    dtTemp.Columns.Add(new DataColumn("role"));
    dtTemp.Columns.Add(new DataColumn("timeText", typeof(String)));
    dtTemp.Columns.Add(new DataColumn("timeValue", typeof(DateTime)));

    #endregion


    dsTemp.Tables.Add(dtTemp);

    for (int index = 0; index < 10; index++)
    {
        DataRow dRow = dtTemp.NewRow();
        dRow[0] = loopCount;
        dRow[1] = "jornathan";
        dRow[2] = "Developer";
        dRow[3] = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        dRow[4] = DateTime.Now;
        dtTemp.Rows.Add(dRow);
    }

    this.BindDataSet(dsTemp);

}

public delegate void updateDataSetDelegate(DataSet ds);

private void BindDataSet(DataSet ds)
{
    if (this.dataGridView1.InvokeRequired)
    {
        this.Invoke(new updateDataSetDelegate(BindDataSet), new object[] { ds });
    }
    else
    {
        this.dataGridView1.DataSource = ds.Tables[0];
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...