DevExpress GridControl이 BindingList에 바인딩되어 있습니다.스레드에서 생성 된 객체의 수명에 대한 설명이 필요합니다.
이 문제는 직접 XtraGrid와 연결되지 않은 : 나는 그것을 봤 다음과 같은 설명을 발견,
나는 스레드에서는 바인딩을 수정하기 위해 노력하고이 예외가 발생했습니다. 안타깝게도 동기화에 많은 문제를 야기하기 때문에 백그라운드 스레드에서 그리드의 데이터 소스를 변경할 수 없습니다. XtraGrid는 백그라운드 스레드가 변경하는 것과 동시에 기본 데이터 소스에서 일부 작업을 수행 할 수 있습니다. 이 경우 그리드는 나중에 변경 알림을 수신하고 위에서 언급 한 문제를 일으킬 수있는 행을 데이터 소스에서 업데이트하려고합니다. 이 문제는 많은 경우에 발생할 수 있습니다. 예를 들어 사용자가 데이터를 편집 할 때 데이터를 그룹화하거나 XtraGrid가 요약을 다시 계산하려고합니다. 이 문제를 해결할 수있는 유일한 방법은 백그라운드 스레드 내에서 Grid의 DataSource 참조를 변경하는 것입니다 (참고 : Invoke 메서드를 사용하여 구현해야합니다). 다르게 말하자면, 백그라운드 스레드 내에서 DataSource의 로컬 복사본으로 작업하고 필요한 경우 해당 클론을 Grid의 DataSource에 전달해야합니다. 첨부 된 예제에서이 접근법을 보여주는 샘플 프로젝트를 찾을 수 있습니다.내가 노력
는이 결과, 말씀 :proxyWorker = new Thread(() =>
{
//Clone the datasource into the thread
BindingList<Proxy> newList = new BindingList<Proxy>(proxies);
//Set the proxy source to the cloned datasource in the thread
gcProxies.BeginInvoke(new MethodInvoker(delegate { gcProxies.DataSource = newList; }));
//Logic here
});
proxyWorker.Name = "proxyTester";
proxyWorker.Start();
그것은 작동하지만, 내가 이해하지 못하는 것은 스레드 종료 후 데이터 소스에 무슨 일입니까? newList
가 파괴되지 않았습니까?
내가 생각하는 말에 나는 newList 재 클론 것이며
new list
삶에 C#을 가비지 컬렉션 '하나 하나'의
질문을 요약하는 제목을 입력하십시오. –
고침, 미안하다. 제대로 설정하는 것을 잊어 버렸다. – TheGateKeeper