不确定我做错了什么:
class MyClass
{
private EventInfo eventInfo;
public void OnGenerateEvent(object sender, EventArgs e)
{
// Called from *main* thread
// Load assembly and set eventInfo here
eventInfo = ....GetEvent(...);
eventInfo.AddEventHandler(source, handler);
// Call to a static method in another assembly
someMethodInfo.Invoke(null, null);
}
public void OnEventChanged(object sender, EventArgs args)
{
// Called from a *worker* thread created
// by that static method in the other assembly
eventInfo is null here !
// Trying to remove handler
eventInfo.RemoveEventHandler(.....);
}
// But...
protected override void Dispose(bool disposing)
{
// Called from *main* thread when program closes
eventInfo is *not* null here
}
}
最佳答案
我认为我们需要看到可重现的代码,但我可以看到 4 种情况:
- 在这两种情况下,您正在与不同的
MyClass
实例对话 - 我敢打赌 - 您在其中一种方法中有一个名为
eventInfo
的变量(如果有任何歧义,请尝试使用this.eventInfo
表示字段) - 写入或读取被缓存(尝试将字段标记为
volatile
;再次不太可能) - 特定于线程的字段(线程本地存储)——不太可能
前两个更有可能。
关于C# - 从工作线程而不是主线程访问时,类字段为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555600/