Quote Originariamente inviata da renygade Visualizza il messaggio
Ciao
Forse mancano pezzi di codice ma..
Ma tu pensi che il backgroundWorker serva solo per creare l'animazione della barra?
Deve essere il backgroundworker a svolgere il "metodo" in maniera asincrona. Proprio con il metodo "DoWork".
http://www.pierotofy.it/pages/guide/...SystemWatcher/
si so che tutto viene svolto all'interno del doWork, infatti al suo interno faccio una specie di simulazione con il ciclo for.
Ecco il resto del codice.
quando metto all'interno del doWork la mia chiamata al vero metodo scrivendo:
vm.MethodCommand.Execute(null);

mi da un eccezione dicendomi che il thread è già occupato

codice:
public partial class ContentUserControl : UserControl
    {
        //connect the ModelView with the View
        #region Constructor
        private readonly SimulComponentViewModel _viewModel;
        public ContentUserControl(SimulationComponentViewModel viewModel)
        {
            InitializeComponent();
            this._viewModel = viewModel;
            this.DataContext = viewModel;
        }
        #endregion
        private void MethodButton_Click(object sender, RoutedEventArgs e)
        {
            SimulComponentViewModel vm = this.DataContext as SimulComponentViewModel;
            if (vm != null)
            {
                BackgroundWorker bgw = new BackgroundWorker();
                bgw.WorkerReportsProgress = true;
                bgw.DoWork += bgw_DoWork;
                bgw.ProgressChanged += bgw_ProgressChanged;
                bgw.RunWorkerAsync();

                vm.MethodCommand.Execute(null);
            }
        }
        private void bgw_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            //TextBoxControll.Value = e.ProgressPercentage;
            TextBoxControll.IsEnabled = true;
            TextBoxControll.Text = e.ProgressPercentage.ToString() + " %";
        }
        private void bgw_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 0; i <= 100; i++)
            {
                (sender as BackgroundWorker).ReportProgress(i);
                Thread.Sleep(25);
            }
        }
}