The first thread is one of NinjaTraders threads. The call stack was
NinjaTrader.Cbi.MasterInstrument.DbLoad()
NinjaTrader.Cbi.MasterInstrument.All.get()
NinjaTrader.Core.Globals.ApplicationStart(System.A ction<string, bool, bool>, System.Func<string, int>)
NinjaTrader.AppHelper.OnStartup.AnonymousMethod__0 (object)
System.Threading.ExecutionContext.RunInternal(Syst em.Threading.ExecutionContext, System.Threading.ContextCallback, object, bool)
System.Threading.ExecutionContext.Run(System.Threa ding.ExecutionContext, System.Threading.ContextCallback, object, bool)
System.Threading.QueueUserWorkItemCallback.System. Threading.IThreadPoolWorkItem.ExecuteWorkItem()
System.Threading.ThreadPoolWorkQueue.Dispatch()
The other thread was an addon I created.
public class DemoAddon: NinjaTrader.NinjaScript.AddOnBase
{
protected override void OnStateChange()
{
switch(State)
{
case State.Configure:
Account.AccountStatusUpdate += Account_AccountStatusUpdate; // dead locked here
break;
}
}
private void Account_AccountStatusUpdate(object sender, AccountStatusEventArgs e)
{
}
}
System.Windows.Threading.DispatcherSynchronization Context.Wait(System.IntPtr[], bool, int)
[Native to Managed Transition]
[Managed to Native Transition]
NinjaTrader.Cbi.MasterInstrument.DbGet(string, NinjaTrader.Cbi.InstrumentType, bool)
NinjaTrader.Cbi.Commission.MasterInstrumentsSerial izable.set(string[])
Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationReaderCommission.Read4_Commission(bool , bool)
Microsoft.Xml.Serialization.GeneratedAssembly.XmlS erializationReaderCommission.Read5_Commission()
[Native to Managed Transition]
[Managed to Native Transition]
System.Xml.Serialization.TempAssembly.InvokeReader (System.Xml.Serialization.XmlMapping, System.Xml.XmlReader, System.Xml.Serialization.XmlDeserializationEvents, string)
System.Xml.Serialization.XmlSerializer.Deserialize (System.Xml.XmlReader, string, System.Xml.Serialization.XmlDeserializationEvents)
NinjaTrader.Cbi.Deserializer.Deserialize()
NinjaTrader.Cbi.Commission.LoadAll()
NinjaTrader.Cbi.Commission.Get(string)
NinjaTrader.Cbi.Account.DbLoad()
NinjaTrader.Cbi.Account.All.get()
NinjaTrader.Cbi.Account.AccountStatusUpdate.add(Sy stem.EventHandler<NinjaTrader.Cbi.AccountStatusEve ntArgs>)
If I recall from sample code, when accessing Account.All one is supposed to lock(Account.All).
Am I supposed to do something similar when connecting to this event handler?
This is the first time having this happen since using NinjaTrader going back to 8.0.2x and this code is at least that old.

Comment