DataGridView nicht selbst aktualisieren, wenn die Aktualisierung aus einem anderen thread

Ich habe ein problem beim aktualisieren DataGridView aus einem anderen thread. Lassen Sie mich erklären. Wenn Benutzer klickt auf eine Schaltfläche auf einem Formular muss ich zum Auffüllen des Rasters mit einigen Zeilen. Dieser Prozess dauert einige Zeit, also mache ich es in einem separaten thread. Bevor der thread ich DataGridView.Enabled Eigenschaft false, um zu verhindern, dass Benutzer von der Bearbeitung von Artikeln, während Sie, die Hinzugefügt wird, und nur vor den arbeiten-thread endet, ich Enabled zurück true.

Das problem ist DataGridView nicht aktualisieren Sie Ihre Inhalte richtig, wenn Bildlaufleisten angezeigt werden müssen. Ich werde verdeutlichen dies mit einem screenshot:

DataGridView nicht selbst aktualisieren, wenn die Aktualisierung aus einem anderen thread

Wie Sie sehen können, die Letzte sichtbare Zeile ist teilweise gezeichnet und die DataGridView nicht nach unten scrollen. Wenn ich die Größe des Rasters, so dass es selbst aktualisieren, werden alle Zeilen angezeigt werden, in der Regel.

Hier einige code:

    private void button1_Click(object sender, EventArgs e)
    {
        string[] fileNames = new string[] { "file1", "file2", "file3" };
        Thread AddFilesToListThread = new Thread(ThreadProcAddRowsToGrid);
        dataGridView1.Enabled = false;
        AddFilesToListThread.Start(fileNames);
    }

    delegate void EmptyDelegate();

    private void ThreadProcAddRowsToGrid(object fileNames)
    {
        string[] files = (string[])fileNames;
        foreach (string file in files)
        {
            EmptyDelegate func = delegate
            {
                dataGridView1.Rows.Add(file);
            };
            this.Invoke(func);
        }

        EmptyDelegate func1 = delegate
        {
            dataGridView1.Enabled = true;
        };
        this.BeginInvoke(func1);
    }

Habe ich auch bemerkt, dass nur Enabled - Eigenschaft bewirkt, dass dieses seltsame Verhalten. Ändern, zum Beispiel BackgroundColor funktioniert einwandfrei.

Könnten Sie mir helfen zu sehen, wo das problem ist?

Schreibe einen Kommentar