Mam funkcjiTemat 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;
}
W Form_Load działać jak ten;
{
_Thread = new System.Threading.Thread(new System.Threading.ThreadStart(ShowAllFly));
_Thread.Start();
_Thread.Priority = System.Threading.ThreadPriority.Normal;
}
Ale kiedy go uruchomię;
w funkcji ShowAllFly
cbFly.Items.Clear(); ---- HERE Gives ERROR LIKE Control.Invoke must be used to interact with controls created on a separate thread.
Na czym polega problem?
Dobre rozwiązanie; bym poleciłbym użyć 'Action' ze struktury, zamiast toczyć (i utrzymywać) swój własny. –
Tak, to normalny sposób na zrobienie tego. Powodem tego jest to, że textBox1.Text można zmienić tylko w wątku, w którym został utworzony textbox - wywołanie to proces używany do powrotu do tego wątku. –
@Fredrik: Masz rację, ale ten przykład jest częściej widoczny, głównie dlatego, że był dłuższy. Każda metoda zadziała. –