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;
        }
Esempio n. 2
0
        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();
                }
            }
        }