سلام ، نکاتی در پرسشتون هست که بنده اونارو توضیح می دم :
1 - سعی کنید همه ی این 10 هزار رکورد رو داخل Datagridview بارگزاری نکنید . کاربر چه نیازی به این همه رکورد داره . می تونید قابلیت Pagingرو پیاده سازی کنید که روش بهتری هست و کاربر به خواست خودش می تونه رکورد های بیشتری رو درخواست بده .
2 - اگر روش بالا رو پیاده سازی کنید برنامه هنگ نمی کنه . ولی اگر دوست ندارید و یا نمی خواین می تونید عملیات اجرای دستور روی بانک اطلاعاتی و load کردن رکورد ها داخل Datagridview رو داخل یک Thread انجام بدین و نتیجه رو در Datagridview نمایش بدین در این صورت Thread اصلی برنامه هم Freeze نیشه و برنامه کار می کنه . برای پیاده سازی این روش هم میتونید از ADI ( Asynchronous Delegate Invocation) یا TPL ( Task Parallel Library( یا نخ های حوضچه ای ( Pooled Thread ) و... استفاده کنید البته TPL مربوط به نسخه های جدید .net هستش ( 4 به بالا ) ولی اون روش های قبلی قدیمیتر هستند و اگر نسخه .net شما پایین هستش می تونید از همونا استفاده کنید .