2011-03-02 3 views
4

마우스 이벤트 핸들러에 스레드를 넣을 수 있습니까?마우스 이벤트 핸들러를 별도의 스레드에 둘 수 있습니까?

Calls_Calls.MouseUp += new MouseEventHandler(Calls_Calls_MouseUp); 

어떻게 스레드를 추가 하시겠습니까?

+0

그리고 왜 전 세계에서이 작업을 수행하고 싶습니까? 10 번 중 9 번, GUI 작업은 모두 단일 스레드에서 수행해야합니다. 'MouseUp' 이벤트 핸들러를 별도의 스레드로 옮겨서 어떤 문제를 해결하려고합니까? –

+0

@CodyGray 마우스 이벤트는 UI와 동일한 스레드에 있기 때문에 패닝 또는 확대/축소 할 때 강렬한 그래픽 프로그램에서 마우스 이벤트가 남아 있다고 생각합니다. 아니면 내가 틀렸어. 현재이 문제로 고민 중입니다. http://stackoverflow.com/questions/27584324/slow-pan-and-zoom-in-wpf?noredirect=1#comment43602704_27584324 – Vahid

답변

3

나는 같은 방법으로 이벤트 핸들러를 설정합니다,하지만 Calls_Calls_MouseUp 방법 당신은 작업 할 스레드를 실행할 수 있습니다 :

private void Calls_Calls_MouseUp(object sender, MouseEventArgs e) 
{ 
    ThreadPool.QueueUserWorkItem(state => { 
     // do the work here 
    }); 
} 

는 그러나, 나는 일반적으로 종종 몇 가지 조건에 따라, 단지 다른 방법을 호출 가능한 모르고 내 이벤트 핸들러를하려고 :

private void Calls_Calls_MouseUp(object sender, MouseEventArgs e) 
{ 
    if (e.Button == MouseButtons.Left) 
    { 
     DoSomething(); 
    } 
} 

private void DoSomething() 
{ 
    ThreadPool.QueueUserWorkItem(state => { 
     // do the work here 
    }); 
} 

이 당신에게 동일한 동작을 트리거 할 수있는 기능을 제공합니다이외의 다른 것에서특정 컨트롤의 이벤트 (메뉴 항목, 도구 모음 단추 및 일반 명령 단추에서 동일한 동작을 수행 할 수 있도록) 또한 기능에 대한 단위 테스트가 가능할 수도 있습니다 (비동기 코드의 경우 다소 까다 롭긴하지만).

+0

덕분에 고정 된 코드 '다른 스레드가 소유하고 있기 때문에'호출하는 스레드가이 개체에 액세스 할 수 없습니다. '오류가 발생했습니다. 무엇이 문제 일 수 있습니까? => { MousePos.Current = e.GetPosition (창'ThreadPool.QueueUserWorkItem (주) 경우 (Window.IsMouseCaptured) 반환; var에 TT = GetTranslateTransform (창)! var에 V = 시작 - e.GetPosition (this); tt.X = Origin.X - vX; tt.Y = Origin.Y - vY; }) ' – Vahid

+1

@Vahid 문제는 UI가 아닌 부분에서 UI 구성 요소를 조작하려고하는 것입니다 -실. 여기에 그 문제를 해결하는 방법이 있습니다 : http://stackoverflow.com/a/872815/93623 –

+0

감사합니다. Fredrik, 나는 위의 질문에 위의 질문을 한 이유가 매우 어려운 문제를 겪었습니다. what is .http : //stackoverflow.com/questions/27584324/slow-pan-and-zoom-in-wpf/27592246? noredirect = 1 # comment43611472_27592246 – Vahid

1

이 적합합니다. 대괄호 오류를 얻을 경우 내가 코드를 :) handwrote 때문에,이를 해결

+0

보낸 사람 및 전자 :에 대한 식별자가 예상 된 오류가 있습니다. 어떻게 해결할 수 있는지 말해 줄 수 있어요? – elisa

+0

MSDN –

1

진행 및 완료를 위해 UI에서 업데이트해야하는 경우에 대비하여 BackgroundWorker을 사용할 수도 있습니다.

관련 문제