Когда я изменяю DataGridView, он дает перекрестную операцию system.invalidoperationexception недопустимым? - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть база данных SQLite, и у меня есть приложение Windows Form.В этой форме есть DataGridView, в котором есть 4 столбца.Я использовал таймер для обновления моего DataGridView содержимого.

Но каждый раз, когда я очищаю DataGridView, я заполняю его, потому что мне нужно отсортировать их по дате.Если я не использую .Rows.Clear() и .Refresh, он добавляет один и тот же контент снова и снова.Поэтому я использую их.

Я использую другой способ, например, строки комментариев, но проблема заключается в

system.invalidoperationexception cross-thread operation not valid

Я перепробовал все решения StackOverflow и весь Интернет, но все же дает мое одно и то же исключение.

В чем моя проблема.Я вызвал этот метод напрямую, и я назвал его как поток, он дал мне то же исключение.Это дает мне исключение, когда я использую DataGridView.Например, в этом блоке кода он дает dgwIslemGemisi.DataSource=dt;

private void guncellemeIslemGecmisiGoster()
{
    dt = db.TumGuncellemeIslemGecmisiGetir();


    dgwIslemGecmisi.DataSource = dt;
    dgwIslemGecmisi.Update();

    dgwIslemGecmisi.Rows.Clear();
    dgwIslemGecmisi.Refresh();

    ////Set AutoGenerateColumns False
    //dgwIslemGecmisi.AutoGenerateColumns = false;

    ////Set Columns Count
    //dgwIslemGecmisi.ColumnCount = 4;

    ////Add Columns
    //dgwIslemGecmisi.Columns[0].Name = "islemAdi";
    //dgwIslemGecmisi.Columns[0].HeaderText = "İşlem Adı";
    //dgwIslemGecmisi.Columns[0].DataPropertyName = "islemAdi";

    //dgwIslemGecmisi.Columns[1].HeaderText = "İşleme Başlangıç Tarihi";
    //dgwIslemGecmisi.Columns[1].Name = "islemBaslangicTarihi";
    //dgwIslemGecmisi.Columns[1].DataPropertyName = "islemBaslangicTarihi";

    //dgwIslemGecmisi.Columns[2].Name = "islemBitisTarihi";
    //dgwIslemGecmisi.Columns[2].HeaderText = "İşlemin Tamamlanma Tarihi";
    //dgwIslemGecmisi.Columns[2].DataPropertyName = "isleminBitisTarihi";

    //dgwIslemGecmisi.Columns[3].Name = "islemDurumu";
    //dgwIslemGecmisi.Columns[3].HeaderText = "İşlem Durumu";
    //dgwIslemGecmisi.Columns[3].DataPropertyName = "islemDurumu";
    //dgwIslemGecmisi.DataSource = dt;


    //for (int i = 0; i < dt.Rows.Count; i++)
    //{

    //    string durum = "Başarısız";
    //    if (dt.Rows[i]["islemDurumu"].ToString() == "1")
    //    {
    //        durum = "Başarılı";
    //    }

    //    dgwIslemGecmisi.Rows.Add(new object[] {
    //        dt.Rows[i]["islemAdi"].ToString(),
    //        dt.Rows[i]["islemBaslangicTarihi"].ToString(),
    //        dt.Rows[i]["islemBitisTarihi"].ToString(),
    //        durum

    //    });


    //}
    dt.Dispose();
}

1 Ответ

0 голосов
/ 12 ноября 2018

Это исключительное решение.

private void guncellemeIslemGecmisiGoster()
        {
            dt = db.TumGuncellemeIslemGecmisiGetir();



            dgwIslemGecmisi.Invoke(new Action(() => dgwIslemGecmisi.DataSource = dt));
            dgwIslemGecmisi.Invoke(new Action(() => dgwIslemGecmisi.Update()));



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