私はWPFが初めてです。PRISM アプリケーションを開発しており、列挙型が更新されたときに UI を更新したいと考えています。modelView で backgroundWorker を使用して、列挙を更新します。列挙自体が更新されてUIがフリーズするまで、すべて正常に動作します!! 友人は私がそのyield
キーワードを使用できるかもしれないと言ったが、私はそれをよく理解していなかった.
コードは次のとおりです。
public void ChangeCollection()
{
BackgroundWorker worker = new BackgroundWorker();
// Set workers job
worker.DoWork += (sender, e) =>
{
RunOnUIThread(() => IsBusy = true);
e.Result = GetPrimes();
};
// On Complete
worker.RunWorkerCompleted += (sender, e) =>
{
RunOnUIThread(() =>
{
IsBusy = false;
// HERE IS WHERE IT GETS STUCK
Numbers = new ObservableCollection<int>
((IEnumerable<int>)e.Result);
});
};
// Start background operation
worker.RunWorkerAsync();
}
public ObservableCollection<int> Numbers
{
get {return _Numbers;}
set
{
_Numbers = value;
RaisePropertyChanged(() => Numbers);
}
}
public IEnumerable<int> GetPrimes()
{
List<int> primes = new List<int>();
for (int i = 0; i < 100000; i++)
{
bool IsPrime = true;
for (int j = 2; j < i; j++)
{
if (i % j == 0)
IsPrime = false;
}
if (IsPrime)
primes.Add(i);
}
return primes;
}
どんなアドバイスでも大歓迎です!
ありがとう、オムリ