Cześć,
jak dodać do dataTable dane z innego wątku jeśli nie obsługuje metody invoke?
Cześć,
jak dodać do dataTable dane z innego wątku jeśli nie obsługuje metody invoke?
Hmmm... Normalnie? Zablokować obiekt, wykonać operację, uwolnić obiekt.
Tu jest świetny opis: Bezpieczny dostęp do danych
dzięki, ale mam jeszcze jedn problem z tym, robię to tak:
lock(dTab)
{
dRow = dTab.NewRow();
dRow["id"] = 9999;
dRow["barcode"] = 1323333;
dRow["status"] = "Przyjecie do Naprawy";
dTab.Rows.Add(dRow);
dTab.AcceptChanges();
dGrid.Select(1);
dGrid.Refresh();
}
do dataTable dodaje się na pewno, ale w dataGrid nie widać zmian i nie wiem dlaczego. Próbowałem już odświeżać itd, ale to nie działa.
Ja tam zawsze łączę DataGridView
ze źródłem danych przez BindingSource
i potem wołam na nim metodę ResetBindings(false)
.
Może problemem jest to, że odwołuje się przez referencję?
public Scaner(ref DataTable dTable, ref ComboBox comboBox1, ref DataGrid dataGrid)
{
_shouldStop = false;
fBox = comboBox1;
dTab = dTable;
dGrid = dataGrid;
}
w głównym wątku ten kod działa bez problemu:
lock(dTable)
{
DataRow dRow = dTable.NewRow();
dRow["id"] = 9999;
dRow["barcode"] = 1323333;
dRow["status"] = "Przyjecie do Naprawy";
dTable.Rows.Add(dRow);
dTable.AcceptChanges();
}
public Scaner(ref DataTable dTable, ref ComboBox comboBox1, ref DataGrid dataGrid)
{
_shouldStop = false;
fBox = comboBox1;
dTab = dTable;
dGrid = dataGrid;
}
Nigdy tak nie pisz - twoje "odwołanie przez referencję" nie działa tak jak myślisz. Usuń te ref'y
dzięki, skasowałem refy, ale to nie pomogło. Dodatkowo po dodaniu wiersza (który się nie pojawia) dataGrid zaczyna się dziwne zachowywać (przy przewijaniu, wiersze nakładają się na siebie).
dGrid.Select(1);
dGrid.Refresh();
wykonaj to poza lock i w wątku gui, o Invoke i InvokeRequired było pewnie już setki razy na forum