public string GetInfo(string ip, int port) { // Load model ConnectModel model = new ConnectModel(ip, port); // Wait for update event bool rudderChanged = false; bool throttleChanged = false; AutoResetEvent waitHandle = new AutoResetEvent(false); // create and attach event handler for the "Completed" event EventHandler eventHandler = delegate(object sender, EventArgs e) { string propertyName = ((PropertyChangedEventArgs)e).PropertyName; if (propertyName == "Rudder" && !rudderChanged) { waitHandle.Set(); rudderChanged = true; } else if (propertyName == "Throttle" && !throttleChanged) { waitHandle.Set(); throttleChanged = true; } }; model.positionChanged += eventHandler; model.updateRudder(); model.updateThrottle(); waitHandle.WaitOne(); waitHandle.WaitOne(); float rudder = model.Rudder; float throttle = model.Throttle; model.stop(); // Return the values return(String.Format("{0},{1}", rudder, throttle)); }