Esempio n. 1
0
        // converts GPSAPI status to System.Device status
        private static GeoPositionStatus ToGeoPositionStatus(NativeMethods.SERVICE_STATE state)
        {
            GeoPositionStatus newStatus = GeoPositionStatus.NoData;

            switch (state)
            {
            case NativeMethods.SERVICE_STATE.SERVICE_STATE_UNKNOWN:
            case NativeMethods.SERVICE_STATE.SERVICE_STATE_OFF:
                newStatus = GeoPositionStatus.Disabled;
                break;

            case NativeMethods.SERVICE_STATE.SERVICE_STATE_UNLOADING:
            case NativeMethods.SERVICE_STATE.SERVICE_STATE_UNINITIALIZED:
            case NativeMethods.SERVICE_STATE.SERVICE_STATE_SHUTTING_DOWN:
                newStatus = GeoPositionStatus.NoData;
                break;

            case NativeMethods.SERVICE_STATE.SERVICE_STATE_STARTING_UP:
            case NativeMethods.SERVICE_STATE.SERVICE_STATE_ON:
                newStatus = GeoPositionStatus.Initializing;
                break;
            }

            return(newStatus);
        }
Esempio n. 2
0
        private static void WaitForStatus(IntPtr hService, NativeMethods.SERVICE_STATE desiredStatus, TimeSpan timeout)
        {
            Stopwatch swLoop = new Stopwatch();

            swLoop.Start();

            NativeMethods.SERVICE_STATUS serviceStatus = new NativeMethods.SERVICE_STATUS();

            do
            {
                Thread.Sleep(500);
                if (!NativeMethods.QueryServiceStatus(hService, ref serviceStatus))
                {
                    throw new Exception($"WaitForStatus: Unable to query status of service, {Marshal.GetLastWin32Error()}");
                }
            }while (serviceStatus.dwCurrentState != (int)desiredStatus && (swLoop.ElapsedMilliseconds <= timeout.TotalMilliseconds));

            if (serviceStatus.dwCurrentState != (int)desiredStatus)
            {
                throw new Exception($"WaitForStatus: Service failed to reach desired state: {desiredStatus}, current state: {serviceStatus.dwCurrentState}");
            }
        }