public RequestEventArgs(RequestType new_info_type, string new_title, string new_message, List<string> new_options, string new_default_option, RequestReply new_result, bool suppressable)
     : base() {
     title = new_title;
     message = new_message;
     info_type = new_info_type;
     options = new_options;
     default_option = new_default_option;
     result = new_result;
     this.suppressable = suppressable;
 }
        protected static RequestReply Request(RequestType type, string title, string message, List<string> choices, string default_choice, bool suppressable) {
            RequestReply request = new RequestReply();

            if (type == RequestType.Choice && (choices == null || choices.Count == 0))
                throw new CommunicatableException("Request Error", "A choice was requested, but no options provided");


            RequestEventArgs e = new RequestEventArgs(type, title, message, choices, default_choice, request, suppressable);

            ICommunicationReceiver receiver = getReceiver();

            if (receiver == null) {
                request.Cancelled = true;
                return request;
            }

			if (receiver.ThreadBridge != null) {
                if (receiver.isSameContext()) {
                    receiver.requestInformation(e);
                } else {
					receiver.ThreadBridge.Post(delegate() {
                        RequestEventHandler handler = receiver.requestInformation;
                        if (handler != null) {
                            handler(e);
                        }
                    });
                    waitForResponse(e);
                }
            } else {
                receiver.requestInformation(e);
            }


            switch (e.response) {
                case ResponseType.Cancel:
                case ResponseType.No:
                    e.result.Cancelled = true;
                    break;
            }

            return e.result;
        }