PDA

View Full Version : خطای Cross-thread operation not valid



milad.biroonvand
دوشنبه 04 اسفند 1393, 14:53 عصر
من از یک نخ بصورت زیر

Dim thread As New Threading.Thread(AddressOf bindcombobox)
thread.Start()



برای بایند یک کمبوباکس استفاده می کنم ولی خطای زیر رو میده

An unhandled exception of type 'System.InvalidOperationException' occurred in System.Windows.Forms.dll


Additional information: Cross-thread operation not valid: Control 'combobox1' accessed from a thread other than the thread it was created on.
مشکلش چیه؟

mahmoud99
دوشنبه 03 آبان 1395, 11:00 صبح
سلام
با اینکه از زمان سوال خیلی گذشته ولی جواب زیر رو میزارم شاید واسه بعضی ها بدرد بخوره
اشکال مربوط به زمانی هست که در استفاده از نخ بخواهید مقداری رو بایند کنید بهش.
مثلا واسه مقدار دادن به یک تکست باکس این ارور واسه ما رخ داد، که با استفاده از کد زیر نتیجه درست شد:
قبلا از این خط کد برای مقدار دادن استفاده می کردیم که همین خط ارور میداد:


statusBox.Text = "" + (connections.ToString());

که به جای این خط از :



SetControlPropertyValue(statusBox, "Text", connections);

استفاده شد. و البته کد های زیر رو هم باید اضافه کنید:



delegate void SetControlValueCallback(Control oControl, string propName, object propValue);
private void SetControlPropertyValue(Control oControl, string propName, object propValue)
{
if (oControl.InvokeRequired)
{
SetControlValueCallback d = new SetControlValueCallback(SetControlPropertyValue);
oControl.Invoke(d, new object[] { oControl, propName, propValue });
}
else
{
Type t = oControl.GetType();
PropertyInfo[] props = t.GetProperties();
foreach (PropertyInfo p in props)
{
if (p.Name.ToUpper() == propName.ToUpper())
{
p.SetValue(oControl, propValue.ToString(), null);
}
}
}
}


البته بسته به نوع کنترل تون باید مقدار Text فرستاده در خط


SetControlPropertyValue(statusBox, "Text", connections);

رو تغیر بدبد .
مثلا برای progressBarباید value رو استفاده کنید.