これはやや不自然な例のように思えるかもしれませんが、頭を悩ませています。
わかりました。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();
}
}
(私には) 不明な理由で、InnerClass の BacgroundWorker はProgressChangedイベントを発生させないようです。交換したら
Form1 form = new Form1();
と
OuterClass outerClass = new OuterClass()
クラス Program では、正常に動作します。では、フォームを介して同じメソッドを呼び出しているときにイベントが発生しないのはなぜですか?
ありがとう!
編集:私は、ProgressChanged イベント ハンドラーを NotImplementedException をスローするままにしておくことで、人々を遠ざけているように見えたので、わかりやすくするために削除しました。