nitrous_007 Ответов: 1

Расширение VSIX visual studio в C# сбрасывается случайным образом


I have a VSIX VIsual studio extension which is a tool window and has many progress bars and buttons. Clicking one of the buttons starts 5-8 worker threads on the background..This starts the 5-8 progress bar and shows the progress of the thread.

Occasionally I see that the progress bar on the thread reset randomly; its almost like a refresh of the ToolWindow and the progress go back to default state. I am not sure what is happening because there is no code that resets the progress bar to default state. The only explanation that I have is the app is crashing and recovering on GUI somehow. After the reset, some of the progress keep updating as if nothing happened continuing on from the reset state as if nothing happened (the worker threads keep running). I am at a loss to figure out what is going on. How can i troubleshoot this?

Have you seen this kind of issue in a Visual Studio extension that you developed where the GUI resets randomly?

What I have tried:

I have looked at crash exceptions. Nothing to report yet.

johannesnestler

Знаете ли вы, как отлаживать расширение VS (через экспериментальный экземпляр)?

nitrous_007

Да. Возможно, что в рабочем потоке work completed thread я не проверяю, не является ли ошибка нулевой . Я добавил Это. До этого я не мог идентифицировать сбой в выходном журнале при запуске, и он разбивался только один раз в то время, так что его трудно было отладить.

johannesnestler

Таким образом, это, по-видимому, классическая проблема "потоковой передачи и исключений"...

nitrous_007

Вполне возможно. Является ли это нормальным поведением для инструмента VSIX для графического интерфейса окна инструмента, чтобы мигать и сбрасываться, чтобы восстановиться после исключения? Это мой первый раз, когда я работаю с проектом VSIX.

1 Ответов

Рейтинг:
7

nitrous_007

Это было исключение, которое не было обработано. Я должен был использовать другого фонового работника для 2 - х разных событий нажатия кнопок-я случайно использовал один и тот же, и я нажимал обе кнопки.

Я добавил ниже обнаружение ошибок и затем проследил ошибку.

void workerBuild_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error == null)
             {     //Proceed as usual}
            else
             {   //print out error}
          }

{