DataTable i dodawanie z innego wątku

DataTable i dodawanie z innego wątku
SA
  • Rejestracja: dni
  • Ostatnio: dni
0

Cześć,

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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

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

Tu jest świetny opis: http://4programmers.net/C_sharp/Bezpieczny_dost%C4%99p_do_danych

SA
  • Rejestracja: dni
  • Ostatnio: dni
0

dzięki, ale mam jeszcze jedn problem z tym, robię to tak:

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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

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

SA
  • Rejestracja: dni
  • Ostatnio: dni
0

Może problemem jest to, że odwołuje się przez referencję?

Kopiuj
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:

Kopiuj
lock(dTable)
				{
					DataRow dRow = dTable.NewRow();
					dRow["id"] = 9999;
					dRow["barcode"] = 1323333;
					dRow["status"] = "Przyjecie do Naprawy";
					dTable.Rows.Add(dRow);
					dTable.AcceptChanges();
				}
Deti
  • Rejestracja: dni
  • Ostatnio: dni
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

SA
  • Rejestracja: dni
  • Ostatnio: dni
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).

massther
  • Rejestracja: dni
  • Ostatnio: dni
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

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.