DataTable i dodawanie z innego wątku

0

Cześć,

jak dodać do dataTable dane z innego wątku jeśli nie obsługuje metody invoke?

0

Hmmm... Normalnie? Zablokować obiekt, wykonać operację, uwolnić obiekt.

Tu jest świetny opis: Bezpieczny dostęp do danych

0

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.

0

Ja tam zawsze łączę DataGridView ze źródłem danych przez BindingSource i potem wołam na nim metodę ResetBindings(false).

0

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();
				}
0

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

0

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).

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1