كيفية تحديث واجهة المستخدم من مؤشر ترابط آخر في C# WinForms؟
مرحبًا أيها الزملاء! أنا مطور C# مبتدئ وواجهت مشكلة تدفعني للجنون. لدي تطبيق Windows Forms يقوم بعملية طويلة (مثل معالجة قائمة كبيرة من الملفات أو تحميل بيانات من الإنترنت). لمنع تجميد الواجهة، أقوم بتشغيل هذه العملية في مؤشر ترابط منفصل باستخدام `Task.Run` أو `Thread`.
إليك مثال مبسط للكود الخاص بي:
```csharp
private void buttonStart_Click(object sender, EventArgs e)
{
Task.Run(() => LongRunningOperation());
}
private void LongRunningOperation()
{
for (int i = 0; i < 100; i++)
{
// بعض العمل
Thread.Sleep(100);
// أحاول تحديث ProgressBar
progressBar1.Value = i;
// أو Label
labelStatus.Text = $"تمت معالجة {i} من 100";
}
}
```
ولكن عندما أقوم بتشغيل التطبيق وأضغط على الزر، يتعطل مع استثناء:
**"System.InvalidOperationException: 'Cross-thread operation not valid: Control 'progress