خطای Cross-thread operation not valid
من از یک نخ بصورت زیر
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.
مشکلش چیه؟
نقل قول: خطای Cross-thread operation not valid
سلام
با اینکه از زمان سوال خیلی گذشته ولی جواب زیر رو میزارم شاید واسه بعضی ها بدرد بخوره
اشکال مربوط به زمانی هست که در استفاده از نخ بخواهید مقداری رو بایند کنید بهش.
مثلا واسه مقدار دادن به یک تکست باکس این ارور واسه ما رخ داد، که با استفاده از کد زیر نتیجه درست شد:
قبلا از این خط کد برای مقدار دادن استفاده می کردیم که همین خط ارور میداد:
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 رو استفاده کنید.