The Listview updates at the end if I have copy running in main thread, but it does not update at all if running in different thread:
public void btnPaste_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(ExecPaste));
t.Start();
}
private void ExecPaste()
{
int i = -1;
var view = CollectionViewSource.GetDefaultView(CopyList[0]._ListCollection);
foreach (cListEntry item in CopyList[0]._ListCollection)
{
i++;
String sourceFile = System.IO.Path.Combine(item.FolderFrom, item.FileName);
String destFile = System.IO.Path.Combine(mPath, item.FileName);
try
{
cListEntry tempitem = CopyList[0]._ListCollection[i];
tempitem.Status = "In Progress...";
view = CollectionViewSource.GetDefaultView(CopyList[0]._ListCollection);
view.Refresh();
System.IO.File.Copy(sourceFile, destFile, true);
tempitem.Status = "OK";
view = CollectionViewSource.GetDefaultView(CopyList[0]._ListCollection);
view.Refresh();
}
catch (System.IO.IOException ex)
{
cListEntry tempitem = CopyList[0]._ListCollection[i];
tempitem.Status = ex.Message.ToString();
}
}
}
I expected the listview to update every time I call view.Refresh(); but it is not.Another problem I created with the thread is that only the first time I click Copy work, the second time I get error:
This type of CollectionView does not support changes to its SourceCollection from a thread different from the Dispatcher thread.
at
CopyList[0]._ListCollection.Add(tempitem);
What am I missing here?