سلام
برای پاسخگو نگهداشتن واسط کاربری (Responsive UI) یکی استفاده از BackgroundWorker که باعث میشه کار زمان بر در یک نخ جداگانه اجرا بشه و UI همچنان برای کاربر پاسخگو باشه و دومی استفاده از Lazy initialization در برنامه است.
Lazy Loading این امکان رو می ده که فقط در هنگام نیاز کار سنگین شروع بشه. مثلاً ممکن است یک فرم بالا بیاید اما کاربر هرگز دکمه مشاهده رکوردها رو نزنه در این صورت چه لزومی داره با لود فرم 100000000 رکورد همون اول نمایش داده بشه!
// Initialize by using default Lazy<T> constructor.
// The Orders array itself is not created yet.
Lazy<Orders> _orders = new Lazy<Orders>();
http://msdn.microsoft.com/en-us/library/dd997286.aspx
How to: Run an Operation in the Background