Это может показаться немного надуманным примером, но я остаюсь, почесывая голову.
Хорошо, у меня есть консольное приложение, которое создает экземпляр WindowsForm и вызывает метод DoSomeWork () в форме.
class Program
{
static void Main(string[] args)
{
Form1 form = new Form1();
form.DoSomeWork();
}
}
Form1 выглядит так ...
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void DoSomeWork()
{
OuterClass outerClass = new OuterClass();
outerClass.DoSomeWork();
}
}
Внешний класс, в свою очередь, выглядит так ...
public class OuterClass
{
public void DoSomeWork()
{
InnerClass innerClass = new InnerClass();
innerClass.DoSomeWork();
}
}
И, наконец, InnerClass выглядит следующим образом ...
public class InnerClass
{
private BackgroundWorker _backgroundWorker = new BackgroundWorker();
public InnerClass()
{
_backgroundWorker.WorkerReportsProgress = true;
_backgroundWorker.DoWork += new DoWorkEventHandler(BackgroundWorker_DoWork);
_backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(BackgroundWorker_ProgressChanged);
}
void BackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
int i = 0; //I've placed a break point here. But it's never hit
}
void BackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
worker.ReportProgress(42);
}
public void DoSomeWork()
{
_backgroundWorker.RunWorkerAsync();
}
}
По неизвестной (мне) причине BacgroundWorker в InnerClass, похоже, никогда не запускает событие ProgressChanged . Если я заменю
Form1 form = new Form1();
с
OuterClass outerClass = new OuterClass()
в классе Program, работает отлично. Так почему же мои события не запускаются, когда я вызываю те же методы через форму?
Спасибо!
РЕДАКТИРОВАТЬ: я, кажется, отбрасывал людей, оставляя обработчик события ProgressChanged как выбрасывающий NotImplementedException, поэтому я удалил его для ясности.