【发布时间】:2018-03-22 22:33:05
【问题描述】:
我遇到的问题是我的后台工作人员在我第一次按下调用它的按钮时完成了工作,但第二次按下该按钮时会生成错误。错误标记在整数而不是集合上。
错误是“这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。”代码行是“ t += 1;”也许我需要在不同的地方定义后台工作人员? 这是部分代码。
public P4LabelBatteryViewModel()
{
BatteryCheckerModel BatteryCheckerModel = new BatteryCheckerModel();
worker.DoWork += worker_DoWork;
worker.ProgressChanged += worker_ProgressChanged;
worker.WorkerReportsProgress = true;
worker.WorkerSupportsCancellation = true;
worker.RunWorkerCompleted += Worker_WorkerCompleted;
}
private void checkOutRestults()
{
TotalFiles = 0;
foreach (var _scripObject in ScriptCollection)
{
if (_scripObject.ScriptNameAdd != "")
{
TotalFiles += 1;
}
}
if (ScriptCollection.Count > 0)
{
_isrunning = true;
worker.RunWorkerAsync();
}
}
void worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
var t = e.ProgressPercentage;
NewBatteryFiles += 1;
}
void worker_DoWork(object sender, DoWorkEventArgs e)
{
ScriptModel _newFileResult = new ScriptModel();
int t = 0;
_newFileResult = CheckOutResults.CheckOutResultBatteryFiles(BatteryLocation, SelectedMachine.Machine);
ScriptCollectionTemp.Add(_newFileResult);
t += 1;
foreach (ScriptModel _checkOutFile in ScriptCollection)
{
_newFileResult = CheckOutResults.CheckOutResultFiles(_checkOutFile, BatteryLocation, SelectedMachine.Machine);
ScriptCollectionTemp.Add(_newFileResult);
t += 1;
worker.ReportProgress(t);
}
//worker.ReportProgress(t);
}
void Worker_WorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
foreach (ScriptModel _checkOutFile in ScriptCollectionTemp)
{
_checkOutFile.BackGround = new SolidColorBrush(Colors.LightGreen);
}
ScriptCollection = ScriptCollectionTemp;
}
【问题讨论】:
标签: c# multithreading mvvm