エラーの意味は理解できますが、理由が思いつかないのは非常に奇妙です。単純化された構造は次のとおりです。
public partial class mainForm : Form
{
public mainForm()
{
InitializeComponent();
IgnoreList = new SortedSet<string>();
IgnoreListQueue IgnoreQueue = new IgnoreListQueue();
}
public class IgnoreListQueue
{
private Dictionary<string, int> myQueue;
public void Add(string s)
{
}
public IgnoreListQueue()
{
myQueue = new Dictionary<string, int>();
}
public bool contains()
{}
~IgnoreListQueue()
{
}
}
public SortedSet<string> IgnoreList;
public IgnoreListQueue IgnoreQueue;
public int LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam)
{
//IgnoreList is fine here
//IgnoreQueue is null here.
//Example:
// bool boo = IgnoreQueue.contains(some string);
}
}
LowLevelKeyboardProc() 関数では、IgnoreQueue が null として表示され、VS がクラッシュをデバッグしたときに、IgnoreQueue が null ポインターであることが実際に示されました。
プログラムがキーボード ストロークをフックするため、LowLevelKeyboardProc() 関数でブレークポイントを設定できませんでした。しかし、mainForm() コンストラクターでブレークポイントを設定することができ、IgnoreQueue が実際に初期化され、その時点でいくつかのデータがロードされたことを示しました。
アイデアはありますか?