간단한 응용 프로그램이 있습니다. 나는 arraylist가 있고이 명부는 웹 사이트를 포함한다.스레딩이 실행되지 않습니다
버튼을 클릭 할 때 오류가 있습니다. 오류는 다음과 같습니다. 스레드 간 동작 잘못 : 아닌 다른 스레드로부터 액세스 제어 'listBox2'
'System.InvalidOperationException'형식의 첫째 예외가
추가 정보가 system.windows.forms.dll 발생 그것이 작성된 thread
이 예외 처리기가있는 경우 프로그램을 안전하게 계속할 수 있습니다.
코드는 다음과 같습니다 : 작동
private void getStatus(Object obj) {
MessageBox.Show((string)obj);
}
: 내가 좋아하는 코드를 작성
private void button2_Click(object sender, EventArgs e) {
for (int i = 0; i < sitelist.Count; i++) {
Thread thread = new Thread(getStatus);
thread.Start((string)sitelist[i]);
}
}
private void getStatus(Object obj) {
listBox2.Items.Add("1");
}
. 왜 내가 목록 상자를 사용하면 오류가 표시됩니까?
감사합니다. Ömer.
다른 스레드에서 UI에 액세스 할 수 없습니다. [이 게시물] (http://stackoverflow.com/questions/9625700/listening-serial-port-how-to-add-string-to-listbox/9625765#9625765) 또는 [this post] (http : /stackoverflow.com/questions/22890740/c-sharp-tcp-client-and-server-having-trouble/22890816#22890816) 또는 [this post] (http://stackoverflow.com/questions/10170448/how-to -invoke-a-ui-method-from-another-thread/10170699 # 10170699). –
분명히,'MessageBox.Show' 메쏘드는리스트 박스와 같은 스레딩 제한을 가지고 있지 않습니다. 목록 상자를 다른 스레드에서 업데이트하는 방법을 묻는 것은 완전히 다른 질문입니다. –
MessageBox는 주 스레드에서 생성 된 핸들에 액세스하지 않기 때문에 실패하지 않습니다. 예를 들어 CTRL + C를 누를 경우 –