MissionPlanner.Comms.SerialPort.CallWithTimeout C# (CSharp) Method

CallWithTimeout() static private method

static private CallWithTimeout ( Action action, int timeoutMilliseconds, string data ) : void
action Action
timeoutMilliseconds int
data string
return void
        static void CallWithTimeout(Action<string> action, int timeoutMilliseconds, string data)
        {
            Thread threadToKill = null;
            Action wrappedAction = () =>
            {
                threadToKill = Thread.CurrentThread;
                action(data);
            };

            IAsyncResult result = wrappedAction.BeginInvoke(null, null);
            if (result.AsyncWaitHandle.WaitOne(timeoutMilliseconds))
            {
                wrappedAction.EndInvoke(result);
            }
            else
            {
                threadToKill.Abort();
                throw new TimeoutException();
            }
        }