Brian Lyttle
그는 물었다 12년 전
4

다른 옵션이 선택되어 후 컨트롤을 통해 메사그버스 표시합니다. 컴팩트형 레임워크 / 스레팅

39, m 에 달하는 i& apc® 수 있는 앱을 설치합니다 a bunch of 업데이트뿐 할인된 가격에 함께 외부 서버 및 레스토랑은 스레팅. 사용자가 inet6.0 프로세스:

  • 버튼 클릭
  • 업데이트 확인 방법, 카운트입니다 반환됨.
  • 0 보다 큰 경우 사용자가 원할 경우 하나님께용서를 관심용 메사게상자드쇼 사용하여 설치할 수 ().
  • 연결되었으면 통해 it on the run () 메서드를 호출 베기닌보크 () 는 루프 및 각 업데이트하십시오 이 실행하십시오 배경.
  • 업데이트 클래스에는 이벤트 내 일부 사용되는 진행율 표시줄에는 업데이트하려면 상술합니다.

이 업데이트는 아직 완전히 메사그버스 는 진행율 표시줄에는 좋아요, 하지만 이 때문에 사용자가 화면에서 리셋했습니다 루프 시작 직후 업데이트하십시오 그러하너라 (http://otl. 스크린샷 참조).

  • 업데이트 루프 시작 전에 메사그버스 즉시 사라지게 하려면 어떻게 해야 하나요?

  • 저 대신 사용하여 스래드입니다 베기닌보크 ()?

  • 저 초기 업데이트 확인 및 호출 () 를 따로 하고 있는 스레드할 메사게상자드쇼 스레드할?

  • 코드*의

// Button clicked event handler code...
DialogResult dlgRes = MessageBox.Show(
    string.Format("There are {0} updates available.\n\nInstall these now?", 
    um2.Updates.Count), "Updates Available", 
    MessageBoxButtons.YesNo, 
    MessageBoxIcon.Question, 
    MessageBoxDefaultButton.Button2
);

if (dlgRes == DialogResult.Yes)
{
    ProcessAllUpdates(um2); 
}

// Processes a bunch of items in a loop
private void ProcessAllUpdates(UpdateManager2 um2)
{
    for (int i = 0; i < um2.Updates.Count; i++)
    {
        Update2 update = um2.Updates[i];

        ProcessSingleUpdate(update);

        int percentComplete = Utilities.CalculatePercentCompleted(i, um2.Updates.Count);

        UpdateOverallProgress(percentComplete);
    }
}

// Process a single update with IAsyncResult
private void ProcessSingleUpdate(Update2 update)
{
    update.Action.OnStart += Action_OnStart;
    update.Action.OnProgress += Action_OnProgress;
    update.Action.OnCompletion += Action_OnCompletion;

    //synchronous
    //update.Action.Run();

    // async
    IAsyncResult ar = this.BeginInvoke((MethodInvoker)delegate() { update.Action.Run(); });
}

    • 스크린샷

&lt, a href = &quot, http://www.flickr.com/photos/brianly/2760435228/&quot. title = &quot, Windows Mobile 에 의해, 버그, img src = https://farm4.static.flickr.com/3043/2760435228_1af7dbf365_o.gif&quot, &quot &gt 브라이언라이 Flickr&quot <; width = &quot 233"; 높이 = &quot 266"; alt = &quot, Windows Mobile Bug&quot. /&gt &lt /a>;;

답변 3 개

39, t 업데이팅이 너회의 ᅴ isn& 작동합니까 문제가 발생하였는가 스레드할 사용자 인터페이스에서 있기 때문이다.

전화를 통해 다음과 같이 사용된다.

this.BeginInvoke((MethodInvoker)delegate() {update.Action.Run(); }) 
호출하십시오 업데이트하십시오 말하고 있습니다. 악타이온.런 () 를 만든 스레드할 &quot this"; 즉, 사용자 인터페이스 (양식에) 어떨까.

Application.DoEvents()

화면 UI 는 실로 다시 기회를 줄 수 있지만, 나는 스레드할 I& # 39, d, 콜 베기닌보크 위임합니다 새로 만들 수 있는.

이렇게 하면 실행하십시오 업데이트하십시오. 악타이온.런 () 함수를 통해 별도의 할당할지 스레드할 스레드할 풀. 그런 다음, 그 때까지 계속 업데이트 완료 업데이트 객체에는 쿼리하지 이시 크레스포르트 확인 후 진행률에 대한 모든 검사 (되므로 # 39, 다른 스레드할 진행율 표시줄에는 업데이트하십시오 can& 없다 / UI) 을 호출하십시오 아프리카션.도벤츠 ().

또한 그 새는 리소스에는 끝날 수 있어야 하고 그렇지 않으면 안드리 보크 () 이라 할 수 있습니다

꼭 이래야겠어요 넣을 수 있어야 하고, 그렇지 않은 경우 진행률 대화 및 취소 버튼을 추가하기에서는 시간초과를 얻을 수 있는 응용 프로그램이 업데이트를 하는 경우 (또는 시간이 오래 걸리는) 그런후에도 너회의 영생하리니 감금했다.

존 시블리 @

You 도망칠 수 없이 다룰 때 함께 not 안드리 보크 호출하십시오 윈포름스 제외어 각오하랬지?

&gt. # 39 m, 규칙을 알고 있는 유일한 예외가 문서화했습니다 I& Windows Forms) 는 공식적으로 요구할 수 없이 콘트럴지네딘보크스 귀찮게 콘트럴드베기닌보크 호출하십시오, where you are

그러나 다른 모든 경우에 다룰 때 비동기 패턴화합니다 시작 / 종료 합니다 유출 때 solaris. 것이라고 밝혔다.

당신은 있다 했다

Application.DoEvents()

여기에

if (dlgRes == DialogResult.Yes)
{
   Application.DoEvents(); 
   ProcessAllUpdates(um2); 
}