은이 같은 함수의 Form_Load 함수스레드
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;
}
이 Control.Invoke;
{
_Thread = new System.Threading.Thread(new System.Threading.ThreadStart(ShowAllFly));
_Thread.Start();
_Thread.Priority = System.Threading.ThreadPriority.Normal;
}
하지만 실행하면;
cbFly.Items.Clear(); ---- HERE Gives ERROR LIKE Control.Invoke must be used to interact with controls created on a separate thread.
문제가 무엇입니까 ShowAllFly 기능에
? 또 다른 (UI) 스레드에서 컨트롤에
좋은 솔루션; 나는 자신의 롤링 (유지)보다는 프레임 워크에서'Action'을 사용하는 것을 권할 것이다. –
네 .. 이걸하는 것이 표준 방법입니다. 이것이 필요한 이유는 textBox1.Text가 텍스트 상자가 생성 된 스레드에서만 변경 될 수 있기 때문입니다. 호출은 해당 스레드로 돌아가는 데 사용되는 프로세스입니다. –
@Fredrik : 당신 말이 맞아,하지만 더 오래되어 있기 때문에이 예는 많은 부분에서 더 자주 볼 수 있습니다. 어느 방법이든 작동합니다. –