2011-01-24 3 views
0

에서 각 선택 항목을 통해가는이 내가 목록보기의 각 항목을 통해 이동하는 데 사용하는 코드는 다음과 같습니다*를 변경하기 * ListView에

이 여전히 작동하는지
for (int i = 0; i < listView.SelectedItems.Count; i++) { 
    MessageBox.Show(listView.SelectedItems[i].SubItems[0].Text); 
} 

내 질문은 경우 목록보기 변경의 항목 . 예를 들어, listView에있는 모든 항목을 선택한 상태에서 위의 코드를 실행하는 버튼을 누릅니다. 코드가 실행되는 동안 listView 업데이트가 있다고 가정하고 항목 중 하나가 제거됩니다. 코드가 여전히 성공적으로 실행됩니까?

답변

3

는 항목이 제거되는 기회가 단지 또 다른 반복하고 허용 루프의 조건 후 항목이 다음 줄에 액세스 할 전에.

이 점을 감안할 때, 이것은 내가 신뢰할 수있는 코드라고 부르는 것이 아닙니다. 스레드가 동일한 리소스에 동시에 액세스하지 못하도록해야합니다. 뮤텍스를 권장하거나 중요한 섹션을 사용하는 것이 좋습니다.

0

먼저 foreach를 사용해야합니다. 그러나 "성공적인"반복은 정의에 따라 다릅니다. foreach 반복의 중간에 목록이 변경되면 예외가 throw됩니다. 이미 가지고있는 것처럼 기본 정수 인덱스를 사용하면 예외가 throw되지 않지만 예측할 수없는 동작 일 수 있습니다. mutex와 같은 일종의 스레드 동기화를 사용하여 목록 변경에 대한 걱정없이 foreach를 성공적으로 반복 할 수 있는지 확인하십시오.