Ahoj,
potřeboval bych poradit s zapisováním dat, které dostávám z jiného threadu. Pročítám si tutoriály o vláknech, ale prostě nejsem z toho moudrý. :-/ Mám v jiné třídě metodu pro zápis do gridu a v hlavním vlákně vše funguje (respektive se vše zapíše až práce celé třídy skončí). Ale jakmile to dám do threadu, tak mi to do Gridu nezapisuje.
Chápu, že musím asi přes Invoke, nebo synchonizatin context, dostat data a zároveň mi asi musí běžet druhý thread pro grid? Ale prostě nevím jak to udělat. Poradil by mi někdo prosím? nechápu jak synchronizovat práci více vláken, které jsou závislé na aktualizaci dat z jednoho threadu.
Mám okno
private void ConvertSNDFFile_Button_Click(object sender, RoutedEventArgs e)
{
if (SDNF_2k14_checkBox.IsChecked == true)
{
_synchronizationContext = SynchronizationContext.Current;
_threadStart = new ThreadStart(Compare);
_thread = new Thread(_threadStart);
_thread.Start();
}
else if (SDNF_2k18_CheckBox.IsChecked == true)
{
MessageBox.Show("Zatím neumím :-(");
}
}
private void Compare()
{
Stopwatch stw = Stopwatch.StartNew();
ReadWriteFile_WND rwf = new ReadWriteFile_WND(datasndf.dataSDNF, PathSDNFFile, NameSDNFFile, frequency, PathPointCloudFile, successRate, interval, Results, numberOfCheks, HalfLength, OneThirdOfTheLength);
stw.Stop();
MessageBox.Show(stw.Elapsed.TotalSeconds.ToString());
}
Pak classu pro zápis do gridu
class DataGridWrite
{
public string Name { get; set; }
public string Result { get; set; }
public void WriteToGrid(string Name, string result , DataGrid resultsGrid)
{
var results = new DataGridWrite
{
Name = Name,
Result = result
};
resultsGrid.Items.Add(results);
}
}
WriteToGrid volám přímo ve třídě kterou spouští Compare(). Což je teda blbě.
Představoval bych si, že vždy po aktualizaci všech dat, které chci mít v gridu, se mi prostě zapíše nový řádek. A z toho poznám postup kodu. Tak samo bych rád udělal i progressbar, ale problém je v podstatě stejný, nevím jak na to. :-/ Díky moc za radu.