В библиотеке классов, которую я пишу, у меня есть метод, позволяющий библиотеке идти и делать что-то в другом потоке, который делает что-то вроде:
public void DoStuffAsync(AP p)
{
this.Running = true;
this.Cancel = false;
ParameterizedThreadStart threadStart = new ParameterizedThreadStart(DoStuff);
Thread procThread = new Thread(threadStart);
procThread.Start(p);
}
У меня также есть ряд событий, объявленных в интерфейсе, к которым может подключиться разработчик, таких как StatusUpdate и ProgressUpdate. В настоящее время я пишу небольшое тестовое приложение (в настоящее время в WPF, хотя ожидаю того же поведения в WinForms), которое вызывает DoStuffAsync (), а затем обновляет индикатор выполнения и метку.
К сожалению, 1-й проход Я получил ошибку, обычный поток не является тем, который владеет элементами управления. То, что я хотел бы сделать, это избавить пользователя от необходимости вызывать Invoke () на стороне пользовательского интерфейса, а также просто подписаться на события и заставить их работать.
Итак, вопрос, есть ли способ, которым я могу сделать это мой код при работе с обработчиками событий? На данный момент срабатывает так:
public void UpdateProgress(object sender, ProgressEventArgs e)
{
if (handler != null)
{
handler(sender, e);
}
}