2016-04-06 25 views
-1

Merhaba Şu anda bin (yaklaşık 3000 +) satır ve 9 sütun ile bir datagridview yaşıyorum. Verigridview'i excel'e dışa aktardığım this method kullanıyordum. Yüzlerce satırın dışa açılmasında sorun yaşanmadı, ancak bin satırın gelmesi durumunda, bu durum askıda kalıyor ve hiçbir şeye tepki vermiyor.datagridview gelen bin satırları excel kullanarak excel kullanarak İhracat

Sorun ne olabilir? ve bundan daha hızlı/daha iyi başka bir yol varsa?

Teşekkür ederiz!

+0

Hangi yöntemden bahsettiğiniz kesinlikle açık değildir, ancak bağlantılı sayfanın ilk yanıtıysa, bu, büyük miktarda veriyi Excel'e aktarmanın en etkili yoludur. Verilerinizi 2d dizisine yükleyin ve tek bir adımda sayfaya yerleştirin. https://www.add-in-express.com/creating-addins-blog/2013/11/29/populate-excel-workbooks-ranges-with-arrays/ –

+0

@TimWilliams bunu açıklamamak için üzgünüm, evet bağlantıdaki yöntemi kullanıyorum. Bunu aslında nasıl yaparım? Bana basit bir örnek verebilir misin? teşekkür ederim! –

+0

Gönderdiğim linkte –

cevap

0

Kod, UI iş parçacığı üzerinde yürütülür, dolayısıyla, uygulamanız yürütülürken donar. UI'nin duyarlı kalmasını istiyorsanız, ikincil bir iş parçacığı üzerinde kodu yürütmeniz gerekir. Sorun şu ki, veriler bir kontrolden geliyor, bu yüzden en azından UI iş parçacığı üzerinde yürütülmelidir.

Bir olasılığın BackgroundWorker kullanmasını ve DoWork olay işleyicisindeki işi yapmasını öneririm. UI iş parçacığı üzerinde ProgressChanged olayını yükselten ReportProgress çağıran bir döngü kurabilir ve verileri sayfalarda almanıza olanak tanır, ardından arka plan iş parçacığındaki elektronik tablonuza yazabilirsiniz. Bir örnekle takip edeceğim.

+0

Evet, donacağını biliyorum ama aslında kilitleniyor ve dışa aktarma işlemini tamamlayamıyordum, 12 saatten fazla süredir bilgisayarımı çalıştırmayı bıraktım. Bir arka plan işçisini kullanmaktansa yine de var mı? veya ihraç etmek için daha hızlı bir yol? –

+0

Niçin/nerede kaldığını bulmaya çalışmaktan sıkıldınız mı? Bir şey askıda kalıyorsa, sonsuz bir döngüden ya da dönmeyen bir yöntem çağrısından kaynaklanır. Senin durumunda hangisi? Bulmak. Bunun için izleme kodu ekleyebilirsiniz, yani ne kadar yol aldığını size bildirmek için kilometre taşlarına çıktı alabilirsiniz. – jmcilhinney

+0

Ayrıca, "ReportProgress" yönteminin eşzamanlı olmadığını ve bu nedenle "ProgressChanged" olay işleyicisinden veri almak için güvenilir şekilde kullanılamayacağını belirledim. Bu, bir yöntemi kendiniz 'Invoke' etmeniz gerektiği anlamına gelir. UI'nizin donmadığını düşünmüyorsanız, bu bir sorun değildir, ancak eğer yaparsanız o zaman bir 'BackgroundWorker 'veya başka bir çok iş parçacığı kullanabilir ve UI iş parçacığı üzerinde verdiğim verileri alabilirsiniz. – jmcilhinney

İlgili konular