2013-05-24 5 views
0

Я использую FluorineFx для отправки/получения данных AMF3 по серверу.C# return a class

netConnection.Call("my-amf", "zend", "Ka_Services_Park", "getCompleteParkOfUser", new GetCustomersHandler(), new object[] { "msg_2580671638", "20251876" }); 

    public class GetCustomersHandler : IPendingServiceCallback 
    { 
     public void ResultReceived(IPendingServiceCall call) 
     { 
      object result = call.Result; 
     } 
    } 

я хочу, чтобы вернуть ответ от класса GetCustomersHandler к классу из называлась я назвал GetCustomersHandler в NetConnection.call в классе Form1, я хочу вернуть/получить ответ (результат объекта) от GetCustomersHandler к Form1.

+1

Когда вы видите такого рода, не являющихся .Net вещей (таких как флэш-материал) и как они используются (например, имея много волшебных строк в одном метод вызова), когда вы понимаете, насколько они действительно сосут. –

ответ

1

Попросите свой объект обратного вызова сохранить результат как свойство.

public class GetCustomersHandler : IPendingServiceCallback 
{ 
    GetCustomersHandler() 
    { 
     this.Signal = new ManualResetEvent(false); 
    } 

    public void ResultReceived(IPendingServiceCall call) 
    { 
     this.Result = call.Result; 
     this.Signal.Set(); 
    } 

    public ManualResetEvent Signal { get; protected set; } 
    public object Result { get; protected set; } 
} 

В вызывающей функции удерживайте объект обратного вызова. Затем, когда netConnection.Call() возвращается, вы можете получить значение

GetCustomersHandler callback = new GetCustomersHandler(); 
netConnection.Call("my-amf", "zend", "Ka_Services_Park", "getCompleteParkOfUser", callback, new object[] { "msg_2580671638", "20251876" }); 
callback.WaitOne(); 
object result = callback.Result; 
+0

Я пробовал что-то вроде вы отправил, но есть небольшая (?) Проблема, object result = callback.Result; вызывается перед GetCustomersHandler, я не знаю почему, но в действительности возвратил результат = null:/ –

+0

является 'netConnection.Call (...)' asyncronous? Если это так, вам придется подождать, пока он завершится. –

+0

Хорошо, я делаю простой поток сна после netConnection.Call и все работает. –