public static async Task WaitAsync(int miliseconds)
 {
     var worker = new BackgroundWorker();
     worker.DoWork += (a, b) =>
     {
         Thread.Sleep(miliseconds);
     }; ;
     await worker.BeginWorkerAsync();
 }
        protected override async void OnNavigatedTo(NavigationEventArgs e)
        {
            if (e.NavigationMode == NavigationMode.Back)
                return;

            SystemTray.IsVisible = true;

            int width, height;
            using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
            {
                var settings = db.Settings.FirstOrDefault();
                width = settings.DefaultImagePixelWidth;
                height = settings.DefaultImagePixelHeight;
            }
            ImageSource = LocalImagesHelper.ReadImageFromIsolatedStorage(Constants.DEFAULT_FACE_PHOTO, width, height);

            var worker = new BackgroundWorker();
            worker.DoWork += (sender, arg) =>
            {
                FaceSdkHelper.Initialize();
            };
            await worker.BeginWorkerAsync();

            var sdkImg = ImageConverter.SystemToSdk(ImageSource);
            var result = FaceSdkHelper.Detect(sdkImg);
            ImageSource = ImageConverter.SdkToSystem(result);

            if (SdkHelper.foundFace == true && SdkHelper.results.Count == 1)
            {
                (ApplicationBar.Buttons[0] as ApplicationBarIconButton).IsEnabled = true;
                (ApplicationBar.Buttons[1] as ApplicationBarIconButton).IsEnabled = true;
                IsCalculating = false;
            }
            else
            {
                MessageBox.Show("Camera did not detect your face! Try again!");
                NavigationService.GoBack();
            }

            FaceSdkHelper = null;
            GC.Collect();
        }
        async void timer_Tick(object sender, EventArgs e)
        {
            try
            {
                var availableSeconds = (DateTime.Now - this.startDate).Seconds;
                Timer = availableSeconds.ToString();

                if (availableSeconds % 5 == 0)
                {
                    Dispatcher.BeginInvoke(async delegate()
                    {
                        if (cam != null)
                        {
                            await cam.CaptureImageAsync();
                        }
                    });

                    var rnd = new Random();
                    int randomLevel = rnd.Next(0, Constants.AvailableLevels + 1);

                    while (selectedPhotos.Contains(randomLevel))
                    {
                        randomLevel = rnd.Next(1, Constants.AvailableLevels + 1);
                    }
                    selectedPhotos.Add(randomLevel);

                    string pic = "/Images/Levels/L" + randomLevel + ".JPG";
                    bmi = new BitmapImage(new Uri(pic, UriKind.Relative));
                    grimacePattern.Source = bmi;
                }

                if (availableSeconds > 19)
                {
                    timer.Stop();

                    IsCalculating = true;
                    Timer = string.Empty;
                    Message = string.Empty;

                    var worker = new BackgroundWorker();
                    DoWorkEventHandler workerHandler = null;

                    this.FaceSdkHelper.Initialize();

                    for (int i = 1; i < 5; i++)
                    {
                        workerHandler = (a, b) =>
                        {
                            startHardWork(i);
                        };
                        worker.DoWork -= workerHandler;
                        worker.DoWork += workerHandler;
                        await worker.BeginWorkerAsync();
                    }

                    IsCalculating = false;

                    NavigationService.Navigate(new Uri(Pages.MainPage, UriKind.RelativeOrAbsolute));
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Something bad appeared! Going back..");
                NavigationService.Navigate(new Uri(Pages.MainPage, UriKind.RelativeOrAbsolute));
            }
        }
        private async Task startHardWork()
        {
            worker = new BackgroundWorker();
            worker.DoWork += (sender, arg) =>
            {
                FaceSdkHelper.Initialize();
            };
            await worker.BeginWorkerAsync();

            var sdkImg = ImageConverter.SystemToSdk(imageBitmap);
            var result = FaceSdkHelper.Detect(sdkImg);

            if (SdkHelper.foundFace == true && SdkHelper.results.Count == 1)
            {
                var shape = SdkHelper.results.FirstOrDefault();

                var defaultFaceCalculations = Calculus.ReadDefaultFaceCalculations();
                var array = FaceCalculationsHelpers.FromFaceCalculationsToVector(defaultFaceCalculations);

                var calculatedFaceCalculations = Calculus.GetFaceCalculationsFromShape(shape);
                var resultArray = FaceCalculationsHelpers.FromFaceCalculationsToVector(calculatedFaceCalculations);

                var conditions = new Conditions();
                var resultFromCalculus = conditions.GetLevelVerifierFunction(Level).Invoke(array, resultArray);

                if (resultFromCalculus != 0)
                {
                    using (var db = new GrimacizerContext(GrimacizerContext.ConnectionString))
                    {
                        var passedLevels = db.Settings.FirstOrDefault()._16_PassedLevels;
                        db.Settings.FirstOrDefault()._16_PassedLevels = Math.Max(passedLevels, Level);

                        var level = db.Levels.FirstOrDefault(t => t.Level == Level);
                        level.Stars = Math.Max(resultFromCalculus, level.Stars);

                        db.SubmitChanges();
                    }
                    MessageBox.Show("Level passed. You won " + resultFromCalculus + " point" + (resultFromCalculus > 1 ? "s!" : "!"));
                }
                else
                {
                    InGameLifeHelpers.LoseLife();
                    MessageBox.Show("Level failed");
                }
            }
            else
            {
                MessageBox.Show("Camera did not detect your face! Try again!");
            }

            NavigationService.Navigate(new Uri(Pages.GeneralGameplay_Adventure, UriKind.RelativeOrAbsolute));
            FaceSdkHelper = null;
            GC.Collect();
        }