मैं एक समारोहथ्रेड Control.Invoke
public void ShowAllFly()
{
cbFly.Items.Clear();
cbFly.Items.Add("Uçuş Seçiniz...");
dsFlyTableAdapters.tblFlyTableAdapter _t=new KTHY.dsFlyTableAdapters.tblFlyTableAdapter();
dsFly _mds = new dsFly();
_mds.EnforceConstraints = false;
dsFly.tblFlyDataTable _m = _mds.tblFly;
_t.Fill(_m);
foreach (DataRow _row in _m.Rows)
{
cbFly.Items.Add(_row["FlyID"].ToString()+"-"+_row["FlyName"].ToString() + "-" + _row["FlyDirection"].ToString() + "-" + _row["FlyDateTime"].ToString());
}
_Thread.Abort();
timer1.Enabled = false;
WaitPanel.Visible = false;
}
इस तरह Form_Load समारोह में है;
{
_Thread = new System.Threading.Thread(new System.Threading.ThreadStart(ShowAllFly));
_Thread.Start();
_Thread.Priority = System.Threading.ThreadPriority.Normal;
}
लेकिन जब मैं इसे चलाता हूं;
ShowAllFly समारोहcbFly.Items.Clear(); ---- HERE Gives ERROR LIKE Control.Invoke must be used to interact with controls created on a separate thread.
समस्या क्या है में
? एक और (यूआई) सूत्र में नियंत्रण पर
अच्छा समाधान; बाइट मैं अपने आप को रोलिंग (और बनाए रखने) की बजाय ढांचे से 'एक्शन' का उपयोग करने की सलाह दूंगा। –
हाँ .. यह करने के लिए यह काफी मानक तरीका है। इसका जरूरी कारण यह है कि textBox1.Text केवल उस थ्रेड पर बदला जा सकता है जिसमें टेक्स्टबॉक्स बनाया गया था - आक्रमण करना उस थ्रेड पर वापस जाने के लिए उपयोग की जाने वाली प्रक्रिया है। –
@ फ़्रेड्रिक: आप सही हैं, लेकिन इस उदाहरण को अधिकतर बार देखा जाता है, क्योंकि यह लंबे समय तक रहा है। या तो विधि काम करेगा। –