2012-11-27 3 views
1

다음과 같이 내가하는 방법이있는 경우 디스패처 BeginInvoke

이 Dispatcher.BeginInvoke

에 대한 질문 :

private void DoSomeWork() 
{ 
    MyCanvas.Dispatcher.BeginInvoke(DispatcherPriority.Background, new DispatcherOperationCallback(delegate 
     { 
      //Do something 

      return null; 

     }), null); 
    } 

를 내가 방법을 여러 번 호출 한 후 여러 호출이 그들이 생성 된 순서대로 실행됩니다 docs : 동일한 DispatcherPriority에서 여러 BeginInvoke 호출이 수행되면 호출이 이루어진 순서대로 호출이 실행됩니다.Dispatcher.BeginInvoke Method MSDN

다른 통화가 중지되거나 대기열을 단일 통화로 재설정하려면 어떻게해야합니까?

+1

당신은 ...하지 않습니다. 적어도 개념적으로는 (실제로는 방법이 있습니다). 당신이 원한다면'BeginInvoke'보다는'Invoke'를 사용해야 할 것입니다. 그래서 당신은 당신이 그것에 도착했을 때 각 작업을 실행할 필요가 있는지 알 것입니다. – Servy

+0

여러 대기열이 발송자에 추가된다는 것을 알고 있다면 처음에는 여러 번 호출해서는 안됩니다. 메소드가 호출되면 일부 변수 또는 무언가를 설정하고이를 기반으로 디스패처에 새 항목을 대기열에 넣지 않습니다. –

+0

대기열 항목을 Dispatcher에 대기시킨 다음 대기열에있는 항목을 수행하는 것을 중지하는 이유는 무엇입니까? – Maxim

답변

1

다른 통화가 중단되거나 대기열을 단일 통화로 재설정하려면 어떻게해야합니까?

그렇지 않습니다. 발송자 대기열을 제어 할 수 없습니다. 당신이 일 수있는 경우 할 수 있습니다 "대기중인 요청"(당신은 물론 원자, 그것을 업데이 트 물론 있는지 확인)의 카운트를 유지하고 이것은 큐의 마지막 호출 (즉, 감소 카운트 0 경우)에만 실행하십시오.

또 다른 옵션은 마지막 호출이 이루어질 때를위한 일종의 타이머를 유지하고 일정 기간 내에 추가 호출을 무시하는 것입니다.

달성하고자하는 목표에 대해 자세히 설명해 주시면보다 구체적인 도움을 드릴 수 있습니다.

+0

나는 근본적으로 일종의 주식 시세 표시기로 작업하고있다. 내 'DoSomeWork'메서드는 티커를 만들고 디스패처는 티커의 마지막 노드가 표시되는지 확인하고 첫 번째 노드를 추가합니다.이 작업은 정상적으로 수행되지만 사용자가 긍정적/부정적 이동으로 필터링 할 수있는 필터가 있습니다. 이 작업을 수행 할 때 필터를 적용한 상태에서 'DoSomeWork'를 다시 호출하여 티커를 다시 작성합니다. 나는 디스패처를 어떤 식 으로든 깨끗이하기를 희망하면서 나쁠 것입니다. 나는 아마도 가서 Dispatcher에서 조금 더 읽을 필요가있다. –

1

제공하신 MSDN 링크를 통해 좀 더 파고 드는 답변을 얻으실 수 있습니다.

이 작업은 취소하는 데 사용할 수있는 DispatcherOperation 개체를 반환합니다. 그러나 대기열 전체를 제어 할 수는 없기 때문에 호출 단위로 처리됩니다.