2009-02-09 4 views
2

두 개의 패널 (상단, 하단)이있는 양식이 있으며 각 패널에는 격자가 있습니다. 기본적으로 맨 위 그리드에서 행을 선택하면 맨 아래 그리드에 세부 사항이 표시되는 마스터 - 세부 양식입니다.UI 유지 무료

데이터를 세부 그리드에 바인딩하는 데 약간의 시간이 걸립니다. 바인딩은 UI 스레드에서 수행되므로 스레드를 차단하므로 사용자는 바인딩이 완료 될 때까지 마스터 그리드에서 다른 행을 선택할 수 없습니다.

바인딩을 통해 데이터 소스에서 데이터를 가져 오는 것은 아닙니다. 실제 데이터 바인딩은 많은 데이터 마스킹을 수행하므로 오래 걸립니다. 세부 그리드 바인딩하는 동안 어떻게 UI 스레드를 무료로 유지할 수 있습니까?

감사합니다.

+0

게리 : 나는 "m 이미 그것은 Infragistics의 그리드 – Sheraz

답변

0

마지막으로 해결책을 찾았습니다. 이 솔루션에는 멀티 스레딩이 포함되어 있지 않습니다. 지연이 메인 쓰레드가 개최되었음을 의미하는 그리드 바인딩에 있다고 말했듯이, 우리는 그다지 할 수 없었습니다. 따라서 해결책은 지연을 가져 오는 것입니다. 사용자가 마스터 행을 선택하면 타이머가 특정 시간 동안 틱합니다. 시간이 만료되기 전에 다른 요청이 있으면 타이머가 다시 시작됩니다. 사용자가 클릭하거나 너무 빠르게 선택했기 때문에 모든 호출이 무시됩니다. 타이머가 만료되면 선택한 행을 가져와 데이터를 표시합니다. 간단하고 우아한 솔루션. 지연이, 내가 말했듯이 :

1

수 없습니다. UI 업데이트는 UI 스레드에서 수행해야합니다.

일부 컨트롤에서 사용할 수있는 BeginUpdate/EndUpdate와 같은 것을 사용하여 바인딩의 속도를 높일 수는 있지만 사용할 수 있는지에 대해 말할 수는 없습니다.

+0

게리을하고 그리고 난"m 이미 내가 인상 그는 이미이 – Sheraz

+0

의 , 위해 BeginUpdate와와 EndUpdate – Sheraz

0

백그라운드 스레드를 사용하여 데이터 검색을 수행 한 다음 UI 스레드를 사용하여 표시 할 수 있습니다.

+0

를 호출 데이터를 가져 오지 않고 데이터를 그리드에 바인딩하므로 BackGround 스레드는 아무 쓸모가 없습니다. –

+0

CK를하고 있었다있어 위해 BeginUpdate와와 EndUpdate – Sheraz

+0

그러면 너무 많은 데이터를 바인딩하거나 매우 느린 컴퓨터를 사용하게됩니다. – cjk

0

내가 너라면 많은 데이터를 처리하는 것처럼 들리므로 별도의 스레드 프로세스로 모든 "마사지"를 분리 할 것입니다.

예를 들어 마스터 레코드가 만들어지면 백그라운드 스레드의 세부 데이터를 다른 데이터 세트로 "수동으로"스핀 오프하고 마사지를 한 다음 결과 데이터 집합을 그리드에 바인딩하면됩니다. UI 스레드에서 발생하는 유일한 방법은 UI 바인딩뿐입니다.

궁극적으로 시간이 오래 걸리면 .NET에서 바로 사용할 수있는 데이터 바인딩 기능을 사용하는 대신 코드에서 수행해야하는 작업을 직접 수행해야하는 응용 프로그램의 중요한 부분에 접근 할 수 있습니다.

+0

routeNpingme : "UI 방식의 유일한 방법은 UI 바인딩뿐입니다."라고 말했습니까? 내 질문은 기본적으로 dalay가 데이터를 가져올 때 바인드 할 때가 아니라는 것을 나타내는 문제였습니다. – Sheraz

+0

내 의견은 데이터를 마사지한다고 말한 곳에서 시작된 것입니다. 이는 어떤 형태의 _DataBinding 이벤트에서 발생한다고 가정합니다. 또는 나는 틀린가? – Brandon

+0

기본적으로 그리드는 데이터 (숫자, 통화 등)를 포맷해야하며 데이터를 바인딩 할 때 모든 작업을 수행합니다. 소스를 그리드 (grid.DataSource = value)로 설정하자마자 스레드가 2-3 초 동안 유지됩니다. 이 기간 동안 화면이 고정됩니다. 나는 이번에 자세히 설명하기를 희망한다. 감사합니다. – Sheraz

관련 문제