public void AddXMlFileToProjectAsync(Action <ProjectTermsCloudResult> resultCallback, Action <int> progressCallback)
        {
            var worker = new BackgroundWorker();

            worker.WorkerReportsProgress = true;

            worker.DoWork += (sender, e) =>
            {
                this.Progress += (s, p) =>
                {
                    if (worker.IsBusy)
                    {
                        worker.ReportProgress(p.Percent);
                    }
                };

                AddXMlFileToProject();
            };
            worker.RunWorkerCompleted += (sender, e) =>
            {
                var result = new ProjectTermsCloudResult();
                if (e.Error != null)
                {
                    result.Exception = e.Error;
                }

                resultCallback(result);
            };
            worker.ProgressChanged += (sender, e) => { progressCallback(e.ProgressPercentage); };
            worker.RunWorkerAsync();
        }
        public void GenerateWordCloudAsync(Action <ProjectTermsCloudResult> resultCallback)
        {
            BackgroundWorker worker = new BackgroundWorker();

            worker.DoWork += (sender, e) =>
            {
                FilterProjectTerms();
                e.Result = Terms;
            };
            worker.RunWorkerCompleted += (sender, e) =>
            {
                ProjectTermsCloudResult result = new ProjectTermsCloudResult();
                if (e.Error != null)
                {
                    result.Exception = e.Error;
                }
                else
                {
                    result.WeightedTerms = (IEnumerable <ITerm>)e.Result;
                }

                resultCallback(result);
            };
            worker.RunWorkerAsync();
        }