Microsoft Word VSTO - обновление ProgressBar в форме - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь обновить ProgressBar, пока выполняю некоторые длительные манипуляции с документом в форме, вызываемой из события нажатия кнопки ленты.Но я получаю исключение «Операция между потоками недопустима: элемент управления« progressBar1 »получен из потока, отличного от потока, в котором он был создан».

Форма работает, как и ожидалось, при вызове из автономного приложения.Ниже приведена разметка образца формы

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();           
    }

    private async void Test_Click(object sender, EventArgs e)
    {
        progressBar.Minimum = 0;
        progressBar.Maximum = 100;
        progressBar.Step = 1;

        var progressHandler = new Progress<int>(value =>
        {
            //throw the error: "Cross-thread operation not valid: Control 'progressBar' accessed from a thread other than the thread it was created on."
            progressBar.Value = value;
        });

        var progress = progressHandler as IProgress<int>;
        await Task.Run(() =>
        {
            for (int i = 0; i != 100; ++i)
            {
                if (progress != null)
                    progress.Report(i);
                Thread.Sleep(100);
            }
        });
        progressBar.Value = progressBar.Maximum;
    }    
}

. Она отлично работает при вызове из автономного приложения.

  static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

Но я получаю исключение "Операция с несколькими потоками недопустима: доступ к элементу управления progressBar1 осуществляется из потока, отличного от потока, в котором он был создан".когда я вызвал его из события нажатия кнопки ленты, хотя.См. Код ниже.

   private void btnRibbon_Click(object sender, RibbonControlEventArgs e)
    {
        var bf = new Form1();            
        bf.Show();            
    }

Играю с ним уже пару дней и не могу понять, в чем проблема.

Спасибо, Брайан

...