Avatar ·

كيفية تحديث الواجهة (GUI) من خيط آخر في C# WinForms؟

مرحباً بالجميع! أنا مطور C# مبتدئ وأكتب تطبيقاً صغيراً على WinForms. لدي زر، عند الضغط عليه يتم تشغيل عملية طويلة (مثل تحميل بيانات من الإنترنت أو معالجة ملف كبير). أريد أن تبقى الواجهة مستجيبة أثناء تنفيذ هذه العملية، لذا أقوم بتشغيلها في خيط منفصل عبر `Task.Run`. تظهر المشكلة عندما أحاول تحديث عناصر الواجهة (مثل ProgressBar أو Label أو TextBox) من هذا الخيط الخلفي. يتعطل التطبيق مع استثناء: "InvalidOperationException: Cross-thread operation not valid. Control 'progressBar1' accessed from a thread other than the thread it was created on." هذا مثال على الكود الخاص بي: ```csharp private void buttonStart_Click(object sender, EventArgs e) { Task.Run(() => DoWork()); } private void DoWork() { for (int i = 0; i <= 100; i++) { // محاكاة عمل طويل Thread.Sleep(50); // أحاول تحديث شريط التقدم } } ```