ali_autumnal
چهارشنبه 31 شهریور 1389, 00:00 صبح
باسلام
من تو پروژه ای که نوشتم نزدیک به 18 تا comboBox دارم و میخوام نام کلیه رنگ های سیستم رو تو اونها قرار بدم.
اما چون تعداد اونها زیاد هست هنگام لود فرم کمی مکث میکنه. میخوام این تابع تو یه نخ جداگانه ای اجرا بشه.
برای این منظور متغیر ها و توابعی که تعریف کردم به شکل زیر هستش:
متغیرهای عمومی:
private System.Threading.Thread thMain;
private ComboBox[] cmb;
private string[] ColorName;
سازنده فرم:
public FSetting()
{
InitializeComponent();
cmb = new ComboBox[]
{
cmbColorbtnDelete,cmbColorbtnEdit,cmbColorbtnNew,c mbColorbtnSave,cmbColorbtnSearch,cmbColorForm,
cmbColorLabel,cmbColorTabControlColor1,cmbColorTex tBox,cmbColorbtnDeleteText,cmbColorbtnEditText,
cmbColorbtnNewText,cmbColorbtnSaveText,cmbColorbtn SearchText,cmbColorTextBoxText,cmbColorTabControlC olor2,
cmbColorTabItem,cmbColorTabItemSelect
};
ColorName = Enum.GetNames(typeof(KnownColor));
Array.Sort(ColorName);
هنگام لود:
thMain = new System.Threading.Thread(new System.Threading.ThreadStart(SetItemComboBox));
thMain.Start();
و تابعی که میخوام تو یه نخ جداگانه ای انجام بشه:
private void SetItemComboBox()
{
foreach (string item in ColorName)
{
foreach (ComboBox c in cmb)
c.Items.Add(item);
}
thMain.Abort();
}
و خطای صادر شده ای که در قسمت قرمز رنگ مشخص کردم
Cross-thread operation not valid: Control 'cmbColorbtnDelete' accessed from a thread other than the thread it was created on.
متشکر
علی پاییزی
من تو پروژه ای که نوشتم نزدیک به 18 تا comboBox دارم و میخوام نام کلیه رنگ های سیستم رو تو اونها قرار بدم.
اما چون تعداد اونها زیاد هست هنگام لود فرم کمی مکث میکنه. میخوام این تابع تو یه نخ جداگانه ای اجرا بشه.
برای این منظور متغیر ها و توابعی که تعریف کردم به شکل زیر هستش:
متغیرهای عمومی:
private System.Threading.Thread thMain;
private ComboBox[] cmb;
private string[] ColorName;
سازنده فرم:
public FSetting()
{
InitializeComponent();
cmb = new ComboBox[]
{
cmbColorbtnDelete,cmbColorbtnEdit,cmbColorbtnNew,c mbColorbtnSave,cmbColorbtnSearch,cmbColorForm,
cmbColorLabel,cmbColorTabControlColor1,cmbColorTex tBox,cmbColorbtnDeleteText,cmbColorbtnEditText,
cmbColorbtnNewText,cmbColorbtnSaveText,cmbColorbtn SearchText,cmbColorTextBoxText,cmbColorTabControlC olor2,
cmbColorTabItem,cmbColorTabItemSelect
};
ColorName = Enum.GetNames(typeof(KnownColor));
Array.Sort(ColorName);
هنگام لود:
thMain = new System.Threading.Thread(new System.Threading.ThreadStart(SetItemComboBox));
thMain.Start();
و تابعی که میخوام تو یه نخ جداگانه ای انجام بشه:
private void SetItemComboBox()
{
foreach (string item in ColorName)
{
foreach (ComboBox c in cmb)
c.Items.Add(item);
}
thMain.Abort();
}
و خطای صادر شده ای که در قسمت قرمز رنگ مشخص کردم
Cross-thread operation not valid: Control 'cmbColorbtnDelete' accessed from a thread other than the thread it was created on.
متشکر
علی پاییزی