0

UI 트리 : 2010 년 4 월 툴 킷의 listboxdragdroptarget와silverlight 4 - UI 스레드에서 작업을 예약하는 가장 빠르고/가장 간단한 방법은 무엇입니까?

  • 목록 상자는
  • 목록 상자 항목 템플릿 버튼의 AA 부부가있는 컨트롤이 포함되어
  • 문제의 클릭 핸들러가 그 버튼 중 하나에 (따라서 UI의 실제 listbox 항목 중 일부이므로 잠재적 인 드래그 드롭 작업)
  • 전체 목록 상자 항목 은 드래그 (목록 상자 내에서 재 배열하거나 다른 목록 상자로 이동) 할 수 있어야하지만 목표는 다음과 같습니다. 클릭 핸들러를 t에 두십시오.

는 현재 버튼 중 하나 (위 참조)에 클릭 처리기가 충분히 오래 걸릴 것으로 보인다 드래그를 트리거에서 HESE 버튼 (그것은 있도록 다양한 UI 변경의 원인이 뷰 모델에 대한 업데이트의 무리를 않습니다 UI 스레드 AFAICT에 있어야합니다.) 매우 자주 드래그 이벤트가 시작됩니다.

이 코드를 클릭 핸들러에서 가져 오는 첫 번째 생각은 DoWork가없는 BackgroundWorker를 만들고 RunWorkerCompleted에 모두 넣는 것입니다. 그러나, BackgroundWorker의 남용과 헤비급과 같은 느낌이 듭니다. 내가 원하는 효과는 동일한 스레드 (UI 스레드)의 PostThreadMessage와 비슷하지만 그렇게 빨리 수행하는 방법에 대해서는 나와 전혀 다른 점이 없습니다.

확실히 스레드 풀이나 새 스레드로 큐에 넣은 다음 UI 스레드로 마샬링 할 수 있지만 다시 상당히 남용처럼 보일 수 있습니다.

답변

1

DispatcherPriority가 낮은 Dispatcher.BeginInvoke는 PostThreadMessage와 거의 유사하다고 생각합니다.

+0

좋은 아이디어 - Silverlight 버전에는 DispatcherPriority가없는 것 같지만 클릭 처리기가 신속하게 반환되어야하므로이 옵션은 매우 실용적인 옵션처럼 보입니다! –

관련 문제