1

以下のコードがあるUIビューlossreport.xamlがあります

    LossReportTowGlassServiceClient wcf = new LossReportTowGlassServiceClient();
            wcf.HouseholdSearchCompleted += (o, ev) =>
            {
                string a = errorMessg.ToUpper();
        //Code to work with ev
            };
            wcf.HouseholdSearchAsync(lossDate, txtPolicyNumber.Text, errorMessg);

service.svc ページで

             try
                {
                    policyinq.retrieveHouseHoldPoliciesCompleted += new   retrieveHouseHoldPoliciesCompletedEventHandler(policyinq_retrieveHouseHoldPoliciesCompleted);

                    policyinq.retrieveHouseHoldPoliciesAsync(reqh, searchCriteria, lossdate, true, string.Empty, string.Empty);
                    break;
                }
                catch (Exception ex)
                {
                    Logger.Exceptions("", "HouseholdSearch", ex);
                    errorToSend = "Household error";
                }

     void policyinq_retrieveHouseHoldPoliciesCompleted(object sender,   retrieveHouseHoldPoliciesCompletedEventArgs e)
    {
        {
            if (e.transactionNotification != null && e.transactionNotification.transactionStatus == TransactionState.S)
            {

            }
            else
            {
                ErrorHandling.ErrorSend(e.transactionNotification, "HouseHold");
            }

        };
    }

今すぐ retrieveHouseHoldPolicies が完了する前に HouseholdSearchCompleted イベントが発生します。

4

2 に答える 2

0

ここにアーキテクチャ上の問題があります。正当な理由がない限り、サービスは非同期リクエストを呼び出すべきではありません(おそらく、いくつかの並列処理を呼び出す必要があります。サーバー側のコードを同期的に呼び出すだけです。

サービス エントリ ポイントには独自のハンドラ スレッドがあり、サービス側で要求応答プロセスを開始および終了する必要があります。あなたがすることは、サービス側で非同期メソッドを呼び出して、リクエストを処理するスレッドにジョブを終了させることです。このスレッドを待機させるか、非同期メソッドを呼び出さずにロジック全体を実行するか、kapish ですか?

于 2012-10-05T07:15:10.453 に答える
0
using System.Threading;
ManualResetEvent _wait = new ManualResetEvent(false);
_wait.Set();//In completed event
_wait.WaitOne();//After the event is completed WaitOne will wait untill the _wait is set with value
于 2012-10-22T06:43:27.060 に答える