コンパクトの枠組み/ねじ-再生し続けますmessageboxを表示上他のコントロール後のオプションが選択され

StackOverflow https://stackoverflow.com/questions/10071

質問

ようにアプリを横串で捉える"と設束の更なるので、外部サーバを必要とネジ.ユーザ以下このプロセス:

  • ボタンをクリック
  • 法チェックのためのプをカウントが返されます。
  • 場合は0より大きくて、それかのユーザーの場合たいインストール再生し続けますmessagebox.Show().
  • 場合により通ループコBeginInvoke()のrun()メソッドの更新を実行しまいます。
  • 私の更新クラスは何らかのイベントに使用される進捗バーの更新等

進捗バーの更新や豪雨で、地滑りや洪水などに再生し続けますmessageboxではない完全クリアの画面で、更新をループのユーザーがクリックあり(画面下)。

  • どうに再生し続けますmessageboxが消え瞬時にアップデート前のループを開始?
  • はっき用スレッドの代わりにBeginInvoke()?
  • きるように初期更新をチェックが別のスレッド呼び出し再生し続けますmessagebox.Show()このスレッド?

コード

// 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(); });
}

スクリーンショット

Windows Mobile Bug

役に立ちましたか?

解決

おUIなの更新が全ての仕事が起きていることを、ユーザインタフェース。お電話で:

this.BeginInvoke((MethodInvoker)delegate() {update.Action.Run(); }) 

しい呼び出します。ます。Run()のスレッドを作成した"こと"(紙)では、ユーザインタフェース。

Application.DoEvents()

実は、UIのスレッドの再描画の画面で、今日はどうもするように誘惑される新たな委譲呼び出BeginInvoke。

これを実行します。ます。Run()関数を別のスレッドの割当スレッドからプールがあります。できるその後の確認IAsyncResultまで更新が完了すると、タ更新のオブジェクトの進行状況を毎にチェックできるのではない、他のスレッドの更新の進捗バー/UI)を呼び出します。DoEvents().

または電話EndInvoke()その後は他にありま漏洩資源

私も誘惑を受け入れる場合には、キャンセルボタンの進捗ダイアログを、タイムアウト、そうでない場合には更新がこだわった(または時間がかかりすぎている)その後あなたのアプリケーションはロックされます。

他のヒント

みけ

Application.DoEvents()

こちらの

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

@ジョンSibly

ない 呼び出しEndInvoke扱う場合などをサポートな負の結果をもたらす。

唯一の記録の例外のルールをしているところを知はWindows Forms、正しくはお電話をさせて頂く。BeginInvoke手を煩わせることなく呼ぶ。EndInvoke.

しかし、その他のすべての処理時の開始/終了非同期パターンすることを想定しま漏洩して記載しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top