次のコードを検討してください。
using System.Threading;
public class BaseClass {
private Timer tmrWork;
public BaseClass() {
// read values from config
tmrWork = new Timer(tmrWork_Tick, null, 1, SomeInterval);
}
private void tmrWork_Tick(object state)
{
DoWork();
}
protected abstract void DoWork();
}
public class ChildClass: BaseClass {
public ChildClass() {
// do a bunch of stuff here
// potentially time consuming
}
protected override void DoWork() {
// do stuff
}
}
ここでの意図は次のとおりです。構成値に基づいて、BaseClass から継承するクラスは、特定の時点で呼び出される DoWork というメソッドを持ちます。
そのメソッドは別のスレッドで呼び出されるため (System.Threading.Timer の使用により)、ChildClass コンストラクターの実行が完了する前に DoWork が呼び出されることがあります。
DoWork が呼び出されるまで、子コンストラクターが完了したことを確認するにはどうすればよいですか?
PS コードは Windows サービスにあります。