Jó összefoglaló a témában.
Update: ez lett a vége:
using System.ComponentModel;
using System.Threading;
using Krs.Ats.IBNet;
namespace ATS.IB
{
///
///
public class MarketData : INotifyPropertyChanged
{
public Contract IBContract { get; set; }
public Ticker Ticker { get; set; }
private decimal lastPrice;
public decimal LastPrice
{
get { return lastPrice; }
set
{
lastPrice = value;
OnPropertyChanged(LastPriceChangedArgs);
}
}
private decimal lastBid;
public decimal LastBid
{
get { return lastBid; }
set
{
lastBid = value;
OnPropertyChanged(LastBidChangedArgs);
}
}
private decimal lastAsk;
public decimal LastAsk
{
get { return lastAsk; }
set
{
lastAsk = value;
OnPropertyChanged(LastAskChangedArgs);
}
}
private int lastSize;
public int LastSize
{
get { return lastSize; }
set
{
lastSize = value;
OnPropertyChanged(LastSizeChangedArgs);
}
}
private int lastAskSize;
public int LastAskSize
{
get { return lastAskSize; }
set
{
lastAskSize = value;
OnPropertyChanged(LastAskSizeChangedArgs);
}
}
private int lastBidSize;
public int LastBidSize
{
get { return lastBidSize; }
set
{
lastBidSize = value;
OnPropertyChanged(LastBisSizeChangedArgs);
}
}
private static readonly PropertyChangedEventArgs LastPriceChangedArgs = ObservableHelper.CreateArgs
private static readonly PropertyChangedEventArgs LastBidChangedArgs = ObservableHelper.CreateArgs
private static readonly PropertyChangedEventArgs LastAskChangedArgs = ObservableHelper.CreateArgs
private static readonly PropertyChangedEventArgs LastSizeChangedArgs = ObservableHelper.CreateArgs
private static readonly PropertyChangedEventArgs LastBisSizeChangedArgs = ObservableHelper.CreateArgs
private static readonly PropertyChangedEventArgs LastAskSizeChangedArgs = ObservableHelper.CreateArgs
private void OnPropertyChanged(PropertyChangedEventArgs e)
{
var eventHandler = PropertyChanged;
if (eventHandler != null)
{
if (guiSyncContext != SynchronizationContext.Current)
{
guiSyncContext.CallOnMainThread(OnPropertyChanged, e);
}
else
{
eventHandler(this, e);
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private SynchronizationContext guiSyncContext = SynchronizationContext.Current;
public void SetGuiSyncContext()
{
guiSyncContext = SynchronizationContext.Current;
}
}
}