شما نمیتونی از Threadی غیر از Thread سازنده فرم به کنترلهاش دسترسی داشته باشی
پس راه حل اینه که از همون threadسازنده فرم استفاده کنی
کلاس فرم (و البته همه کنترل ها) متدی داره با اسم Invoke و خاصیتی به اسم InvokeRequired از نوع boolean
متد Invoke ، متدی را که تحت پوشش delegate بعنوان پارامتر میپذیره ، در Thread سازنده ی خودش اجرا میکنه
خصوصیت InvokeRequired مشخص میکنه که آیا شما در Thread سازنده فرم قرار دارین یا خیر
پس:
ابتدا با استفاده ازInvokeRequired بررسی میکنیم که در Thread فرم قرار داریم یا نه . اگه قرار داشتیم که بدون هیچ کار اضافی ، کنترل مورد نظرمون رو دستکاری میکنیم ، در غیر این صورت متدی که میخواهیم در اون کنترل رو دستکاری کنیم تحت پوشش delegate به متد Invoke ارسال میکنیم تا اجرا بشهو کنترل رو دستکاری کنه.
delegate void SampleDelegate();
void SampleMethod()
{
if(form.InvokeRequired)
{
SampleDelegate d = new SampleDelegate(SampleMethod);
form.Invoke(d);
}
else
lable1.Text = "My text was changed";
}