Несколько плохо знаком с C #, но у меня есть серьезная проблема с тем, чтобы заставить эти вещи работать, потому что если мой фоновый работник выполняет длинный процесс с использованием метода из другого класса, то у этого класса нет доступа к фоновому работнику, чтобы обновить прогресс.
Например:
private void bgWorker_DoWork(object sender DoWorkEventArgs e)
{
bgArgs args = e.Argument as bgArgs;
MyClass objMyClass = new MyClass();
MyClass.MyMethod(strValue, args.Option);
//Do something based on return value of long process.
}
Если я пытаюсь обновить bgWorker из класса «MyClass», он не может «видеть» bgWorker, он не существует в контексте класса, он находится в классе пользовательского интерфейса, потому что в Visual Studio его можно перетащить из панели инструментов.
Единственный способ заставить его работать - это передать всю форму пользовательского интерфейса классу, что создает другие проблемы при попытке доступа к этому классу из любой точки, кроме основной формы. Оттуда я просто обновляю индикатор выполнения вручную через ProgressBar1.PerformStep (), поскольку он проходит через циклы.
Кроме того, я уже изменил модификатор на индикаторе выполнения на внутренний, так что класс не видит индикатор выполнения.
Возможно, я смогу передать bgworker самому классу через метод, но это не совсем верно.