için uzun bir görüşme için ilerleme bildirme nasıl yapılır? AnalysisResult
adlı özel bir dizi özel nesnem var. Dizi yüz binlerce nesneden oluşabilir; ve bazen bu dizinin sadece Distinct()
elemanına ihtiyacım var.C#
public static AnalysisResult[] GetDistinct(AnalysisResult[] results)
{
return results.Distinct(new AnalysisResultDistinctItemComparer()).ToArray();
}
Buradaki sorun dizisi özellikle büyük olduğu zaman bu çağrı (dakika mertebesinde) uzun bir zaman alabilir olmasıdır (: Yani, bir madde karşılaştırıcısı sınıf AnalysisResultDistinctItemComparer
denilen ve böyle çağrımı yapmak yazdı 200.000'den fazla nesne).
Şu anda bir arka plan çalışanında bu yöntemi çağırın ve kullanıcıya yöntemin gerçekleştirildiğini bildirmek ve uygulamanın donmamış olduğunu bildirmek için bir döndürme gifini görüntüleyin. Bu her şey yolunda ve iyi ama kullanıcı mevcut ilerlemenin herhangi bir göstergesi değildir.
Kullanıcıya bu eylemin şu andaki ilerleyişini gösterebilmem gerekiyor; ama, iyi bir yaklaşım geliştiremedim.
public static AnalysisResult[] GetDistinct(AnalysisResult[] results)
{
var query = results.Distinct(new AnalysisResultDistinctItemComparer());
List<AnalysisResult> retVal = new List<AnalysisResult>();
foreach(AnalysisResult ar in query)
{
// Show progress here
retVal.Add(ar);
}
return retVal.ToArray();
}
Ama sorun benim gerçek ilerleme ne bilmenin bir yolu olması: Böyle bir şey yapmanın oynuyordu. Düşünceler? Öneriler?
Yapacağınızı düşündüğüm sorun, ilerleme göstergesinin maksimum değerini ayarlamak için önünüzde kaç farklı değerin bulunduğunu bilmeniz gerektiğidir. Tabii ki sorgunuz gerçekten kaçana kadar bu değeri bilmeyeceksiniz ... Bu süreci her zaman biraz parallalizm (çerçevenizden emin değil) kullanarak deneyebilirsiniz. Http://msdn.microsoft.com/tr -us/library/dd383943.aspx – Damon