private void Job_ProgressChanged(CacheJob sender, ProgressChangedEventArgs args)
        {
            if (!Dispatcher.CheckAccess())
            {
                Dispatcher.Invoke(() => Job_ProgressChanged(sender, args));
                return;
            }

            progressBar.Value = args.Progress;
        }
        //private void Job_Started(CacheJob sender, EventArgs args)
        //{
        //    if (!Dispatcher.CheckAccess())
        //        Dispatcher.Invoke(() => Job_Started(sender, args));
        //}
        private void Job_Finished(CacheJob sender, EventArgs args)
        {
            if (!Dispatcher.CheckAccess())
            {
                Dispatcher.Invoke(() => Job_Finished(sender, args));
                return;
            }

            Destroy();
        }
        private void Job_LogAdded(CacheJob sender, string message)
        {
            if (!Dispatcher.CheckAccess())
            {
                Dispatcher.Invoke(() => Job_LogAdded(sender, message));
                return;
            }

            statusLabel.Content = message;
        }
        public CacheJobUserControl(CacheJob job)
        {
            InitializeComponent();

            Job = job;

            //bind events to control
            job.ProgressChanged += Job_ProgressChanged;
            job.Finished += Job_Finished;

            //job.Started += Job_Started;
            job.LogAdded += Job_LogAdded;
        }
		/// <summary>
		///     Creates a new user control for the job and adds it to the stackpanel
		/// </summary>
		private void RegisterNewJob(CacheJob sender, EventArgs args)
		{
			if (!Dispatcher.CheckAccess())
			{
				Dispatcher.Invoke(() => RegisterNewJob(sender, args));
				return;
			}

			var userControl = new CacheJobUserControl(sender);
			jobsStackPanel.Children.Add(userControl);
		}