public BackgroundWorker Worker; // Handle / control point for asynch tasks #endregion #region Constructors public Picasso() { InitializeComponent(); // Initialize Mdi workspace mainMenuStrip.MdiWindowListItem = windowMenuItem; // Initialize list of scenarios _scenarios = new List <ScenarioForm>(); // Initialize documentation _documentationUrl = "http://tythos.net/horizon/documentation/picasso/"; _documentationForm = new SimpleBrowser(_documentationUrl, false); _documentationForm.MdiParent = this; _documentationForm.Text = "Picasso Documentation"; _documentationForm.Icon = Icon; _documentationForm.Persistent = true; // Initialize settings _settingsDialog = new PicassoSettings(); _settingsDialog.Icon = Icon; UpdateSettings(); // Initialize window title _textPrefix = "Horizon / Picasso"; Text = _textPrefix; // Create a blank scenario when application launches ScenarioForm defaultScenario = new ScenarioForm(this); _scenarios.Add(defaultScenario); UpdateTreeView(); // Create a SimpleBrower for displaying serialized elements, and set cache target _xmlBrowser = new SimpleBrowser("http://tythos.net/horizon/xmlBrowser.html", false); _xmlDumpLocation = "C:\\.horizonDump.xml"; _xmlBrowser.MdiParent = this; _xmlBrowser.Persistent = true; // Set up background worker Worker = new BackgroundWorker(); // Debugging setting: true will cause errors to be displayed via message box _isDebugging = true; }
private void StartButton_Click(object sender, RoutedEventArgs e) { if (!running) { var timeLimited = false; TimeSpan duration = default(TimeSpan); int runs = 0; var threads = Convert.ToInt32(Threads.SelectionBoxItem); var durationText = (string)((ComboBoxItem)Duration.SelectedItem).Content; StatusProgressbar.IsIndeterminate = false; SimpleBrowser.LoginEpiserverWebForms(LoginUrl.Text, Username.Text, Password.Text); switch (durationText) { case "1 run": runs = 1; break; case "10 runs": runs = 10; break; case "100 runs": runs = 100; break; case "10 seconds": duration = TimeSpan.FromSeconds(10); timeLimited = true; break; case "20 seconds": duration = TimeSpan.FromSeconds(20); timeLimited = true; break; case "1 minute": duration = TimeSpan.FromMinutes(1); timeLimited = true; break; case "10 minutes": duration = TimeSpan.FromMinutes(10); timeLimited = true; break; case "1 hour": duration = TimeSpan.FromHours(1); timeLimited = true; break; case "Until canceled": duration = TimeSpan.MaxValue; timeLimited = true; StatusProgressbar.IsIndeterminate = true; break; } var urls = Regex.Split(Urls.Text, "\r\n").Where(u => !string.IsNullOrWhiteSpace(u)).Select(u => u.Trim()); if (!urls.Any()) { return; } Threads.IsEnabled = false; Duration.IsEnabled = false; Urls.IsEnabled = false; cancellationTokenSource = new CancellationTokenSource(); var cancellationToken = cancellationTokenSource.Token; var job = new Job <UrlResult>(); StatusProgressbar.Value = 0; StatusProgressbar.Visibility = Visibility.Visible; job.OnProgress += OnProgress; if (timeLimited) { task = Task.Run(() => job.ProcessUrls(threads, duration, urls, cancellationToken)); } else { task = Task.Run(() => job.ProcessUrls(threads, runs, urls, cancellationToken)); } var awaiter = task.GetAwaiter(); awaiter.OnCompleted(JobCompleted); StartButton.Content = "Cancel"; running = true; } else { if (cancellationTokenSource != null && !cancellationTokenSource.IsCancellationRequested) { cancellationTokenSource.Cancel(); } } }