private void CreateProfileAsync()
        {
            // Store the current Date (to calculate elapsed time)
            mProfileProcessingStartDate = new Date();
            DWProfileChecker checker = new DWProfileChecker(this);

            DWProfileChecker.DWSettings checkerSettings = new DWProfileBase.DWSettings {
                ProfileName = mProfileName, TimeOut = 30000
            };
            checker.Execute(checkerSettings, (profileCheckerResults) =>
            {
                if (string.IsNullOrEmpty(profileCheckerResults.Error))
                {
                    if (profileCheckerResults.Exists)
                    {
                        // Profile has been found, setting to not continuous mode
                        AddLineToResults("Profile " + profileCheckerResults.ProfileName + " found in DW profiles list.\n Forcing profile to not continuous mode.");
                        DWSwitchContinuousMode switchContinuous = new DWSwitchContinuousMode(this);
                        DWSwitchContinuousMode.DWSwitchContinuousModeSettings switchSettings = new DWSwitchContinuousMode.DWSwitchContinuousModeSettings
                        {
                            ProfileName    = mProfileName,
                            TimeOut        = 30000,
                            ContinuousMode = false
                        };
                        switchContinuous.Execute(switchSettings, (switchContinuousResult) =>
                        {
                            if (string.IsNullOrEmpty(switchContinuousResult.Error))
                            {
                                // Force "Not Continuous" mode succeeded.
                                AddLineToResults("Params switched to not continuous on profile: " + switchContinuousResult.ProfileName + " succeeded");
                                // Let's calculate the elapsed time since the begining of the process
                                Date current  = new Date();
                                long timeDiff = current.Time - mProfileProcessingStartDate.Time;
                                AddLineToResults("Check+Switch took: " + timeDiff + " ms to process.");
                                AddLineToResults(mSeparator);
                            }
                            else
                            {
                                AddLineToResults("Error switching params to not continuous on profile: " + switchContinuousResult.ProfileName + "\n" + switchContinuousResult.Error);
                                AddLineToResults(mSeparator);
                            }
                        });
                    }
                    else
                    {
                        // Profile not found, let's create a new one
                        AddLineToResults("Profile " + profileCheckerResults.ProfileName + " not found in DW profiles list. Creating profile.");
                        DWProfileCreate profileCreator            = new DWProfileCreate(this);
                        DWProfileCreate.DWSettings createSettings = new DWProfileCreate.DWSettings
                        {
                            ProfileName = mProfileName,
                            TimeOut     = 30000
                        };
                        profileCreator.Execute(createSettings, (creationResult) =>
                        {
                            if (string.IsNullOrEmpty(creationResult.Error))
                            {
                                // Profile creation succeeded, let's set this profile initial parameters
                                AddLineToResults("Profile: " + creationResult.ProfileName + " created with success.\nSetting config now.");
                                DWProfileSetConfig profileSetConfig = new DWProfileSetConfig(this);
                                DWProfileSetConfig.DWProfileSetConfigSettings setConfigSettings = new DWProfileSetConfig.DWProfileSetConfigSettings
                                {
                                    ProfileName    = mProfileName,
                                    TimeOut        = 30000,
                                    IntentAction   = mIntentAction,
                                    IntentCategory = mIntentCategory,
                                    AggressiveMode = false
                                };
                                profileSetConfig.Execute(setConfigSettings, (setConfigResult) =>
                                {
                                    if (string.IsNullOrEmpty(setConfigResult.Error))
                                    {
                                        // Initial parameters set successfully, let's force this profile to not continuous mode
                                        // It is not necessary since the default mode is "not continuous", but we like to ensure that
                                        // the config is exactly what we want...
                                        AddLineToResults("Set config on profile: " + setConfigResult.ProfileName + " succeeded.");
                                        Date current  = new Date();
                                        long timeDiff = current.Time - mProfileProcessingStartDate.Time;
                                        AddLineToResults("Check+Create+Set took: " + timeDiff + " ms to process.");
                                        AddLineToResults(mSeparator);
                                    }
                                    else
                                    {
                                        AddLineToResults("Error setting params on profile: " + setConfigResult.ProfileName + "\n" + setConfigResult.Error);
                                        AddLineToResults(mSeparator);
                                    }
                                });
                            }
                            else
                            {
                                AddLineToResults("Error creating profile: " + creationResult.ProfileName + "\n" + creationResult.Error);
                                AddLineToResults(mSeparator);
                            }
                        });
                    }
                }
                else
                {
                    AddLineToResults("Error checking if profile " + profileCheckerResults.ProfileName + " exists: \n" + profileCheckerResults.Error);
                    AddLineToResults(mSeparator);
                }
            });
        }
 public CheckProfileReceiver(DWProfileChecker dWProfileChecker)
 {
     mProfileChecker = dWProfileChecker;
 }