2

私のSilverlightユーザーコントロールでは、アプリケーションからのイベントをリッスンしており、WCFサービスを呼び出して何らかのアクションを実行しています

void SelectedCustomerEvent(string customer)
{
//.......

_wcfserviceagent.GetCustomer(customer, callback);
}

  void callback(ObservableCollection<CustomerType> customer)
{

//do some action

}

特定のシナリオでは、特定のアクションを実行すると、イベントが複数回発生します。問題は、コールバックが必ずしも WCF サービスの呼び出し順に呼び出されるとは限らないことです。

呼び出しとコールバックが常に順番に呼び出されるようにする方法はありますか?

理想的には、イベントに対してサービスとコールバックを呼び出し、その間に発生する他の呼び出しがキューに入れられるような方法で実行したいと考えています。もちろん、UI スレッドをブロックすることはできません。

4

1 に答える 1

1

WCFサービスへの呼び出しのシーケンスを確認する唯一の方法は、クライアントに独自のキューを実装することです。

例えば:

Queue<string> _customersQueue = new Queue<string>();
bool _fetching;
void SelectedCustomerEvent(string customer)
{
    _customersQueue.Enqueue(customer);
    //.......
    if (!_fetching)
    {
        DoFetchCustomer(_customersQueue.Dequeue());
    }
}

void DoFetchCustomer(string customer)
{
    _fetching = true;
    _wcfserviceagent.GetCustomer(customer, callback);
}

void callback(ObservableCollection<CustomerType> customer)
{
    _fetching = false;
    //do some action
    if (_customersQueue.Count > 0)
    {
        DoFetchCustomer(_customersQueue.Dequeue());
    }
}
于 2013-02-18T07:40:05.177 に答える