سلام
ذات استفاده شما از متد Invoke صحیح است و راه حل مشکلتان همین است ولی نه اینکه کل دستورات را در آن اجرا کنید.
اینطوری اصلاً فرقی نمیکند که از کامپونت استفاده کردید و همانطور که خودتان گفتید باز فرم فریز میشود.
شما باید متد Invoke را فقط در جایی در داخل DoWork فراخوانی کنید که قصد دارید چیزی را در کنترلر اصلی روی فرم و یا خود فرم تغییر دهید.
مثلاً فقط برای اضافه کردن آیتم به ListView باید از Invoke استفاده کنید.
(
البته راه حل غیر استانداری هم دارد که از طرف مایکروسافت سفارش نشده و بهتر است به همین Invoke استاندارد و سافارش شده عادت کنید!
)