2017-04-26 19 views
-1

長時間実行しているWCFサービスと、WPF経由でそれを使用するクライアントがあります。特定のプロセスのための完了率のクライアントに通知するためにプログレスバーを使用しています:私が持っている長時間実行するWCFサービスのWPFアプリケーションのプログレスバー

  • (WCFでのメソッド私はサービスにループカウンタに基づいた割合を表示できるようにする必要があります)バックグラウンドワーカーを使用して進捗率を表示しますが、進捗状況は正しく表示されません。 (値の間に0と100だけ表示されます)DEBUGモードではすべて動作しますが、RELEASEモードではうまく動作しません! (プログレスバーはDEBUGモードで順番に更新されます)

  • 私はコールバック/ wsDualHttpBindingを使用しようとしましたが、これをすべてのクライアントに組み込むのが難しいです。だから、このオプションを落とさなければならなかった。非同期/

を待つに取り組ん

  • 私はかなりの数のリンクをGoogleで検索しているが、何も私の問題に役立ちません。

    WCFサービスからまだ完了していないメソッドから現在/実行中の値を取得する方法を教えてください。この値に基づいてプログレスバーの割合を設定できます。 (値の間で)

    P.S:ちょうどそれを実装する方法を理解すること

    public Progress() 
    { 
        // Start the BackgroundWorker. 
         myBGWorker.WorkerReportsProgress = true; 
         myBGWorker.WorkerSupportsCancellation = false; 
         myBGWorker.DoWork += myBGWorker_DoWork; 
         myBGWorker.ProgressChanged += myBGWorker_ProgressChanged; 
    } 
    
    public void ShowProgress() 
    { 
        myBGWorker.RunWorkerAsync(); 
    } 
    
    private void myBGWorker_DoWork(object sender, DoWorkEventArgs e) 
    { 
    
         // fetches a static value from the service 
         string value = _client.Progress(); 
    
        int p=0; 
         for (int i = 1; i <= 100; i++) 
          { 
           // Report progress. 
           p = Convert.ToInt32(_client.Progress()); 
           _logger.Debug("Progress5:" + p.ToString()); 
           myBGWorker.ReportProgress(p, i); 
          } 
    } 
    
    private void myBGWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
        this.Dispatcher.BeginInvoke(new Action(delegate 
          { 
           progressBar1.Value = e.ProgressPercentage; 
          }), DispatcherPriority.ContextIdle); 
    
    } 
    
  • 答えて

    0

    :WCFサービスは、以下のwsHttpBinding

    サンプルコードを使用しています。これは私の作業コードの一部です。 の.xamlファイル:

    <ProgressBar x:Name="ProgressBarCompare" HorizontalAlignment="Left" Height="20" Margin="10,157,0,0" VerticalAlignment="Top" Width="321"/> 
    

    プロセスと機能:それに

     private async void btnCompare_Click(object sender, RoutedEventArgs e) 
        { 
         ProgressBarCompare.Value = 0; 
         lblCompare.Content = ""; 
         List<string> list1= (List<string>)Application.Current.Properties["list1"]; 
         List<string> list2= (List<string>)Application.Current.Properties["list2"]; 
    
         List<Result> output = new List<Result>(); 
         List<Result> passed = new List<Result>(); 
    
         int topCount = emailList.Count; 
         int currentItem = 0; 
         int topBound = topCount - 1; 
    
         while (currentItem < topCount) 
         { 
          var hash = await CheckOperation(list1[currentItem]); // this line perform progress bar to be filled 
    
          var result = list2.Contains(hash); 
    
          //some operations 
    
          if (Convert.ToInt32(Math.Ceiling(100d * currentItem/topBound)) < 51) 
          { 
           Style style = this.FindResource("LabelTemplateNotFilled") as Style; 
           lblCompare.Style = style; 
          } 
          else 
          { 
           Style style = this.FindResource("LabelTemplateFilled") as Style; 
           lblCompare.Style = style; 
          } 
    
          ProgressBarCompare.Value = Convert.ToInt32(Math.Ceiling(100d * currentItem/topBound)); 
          lblCompare.Content = Convert.ToInt32(Math.Ceiling(100d * currentItem/topBound)) + "%"; 
    
          currentItem++; 
         } 
    
         lblCompare.Content = "COMPLETE"; 
    
        } 
    

    とコア機能:

    private async Task<string> CheckOperation(string input) 
        { 
         var result = ""; 
         await Task.Run(() => 
         { 
          //perform some code 
         }); 
    
         return result; 
    
        } 
    
    +0

    はあなたにSouXinをありがとうございます。私の問題は、サービスからUIへの値を取得することです。 UIの進行状況データをバインドしません。私は、コールバック/デュプレックスバインディングを使用せずに進捗データをクライアントに送信する方法を理解したいと思います。 wsHttpBindingを使用して、クライアントプロキシから関数サービス呼び出しの中間値を取得するにはどうすればよいですか?現在はバックグラウンドワーカーを使用していますが、DEBUGモードでは正常に動作しますが、リリースモードでは値を返しません。これがどのように起こっているかについてはあまりよく分かりません。 – kani

    関連する問題