Можно ли получить доступ из стратегии к внешним коллекциям. Вроде этого:
public partial class MainWindow : Window
{
public static ObservableCollection<MarketDepth> Stakan { get; set; }
public MainWindow()
{
Stakan = new ObservableCollection<MarketDepth>() { };
InitializeComponent();
}
}
class MyStrategy:Strategy
{
protected override void OnStarted()
{
[h]Stakan.???[/h]
base.OnStarted();
}
}
Комментарии (8)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Можно, это можно сделать разными путями: передать коллекцию в конструктор стратегии, использовать статическое публичное поле коллекции, передать коллекцию в стратегию через специальное поле, быть может, можно как-то еще. Пример использования статического поля:
А, да! Класс MainWindow не указал.
А как вернуть в поток стакан типа ObservableCollection<Quote> Stakan, через Dispatch.Invoke или GuiAsync...?
Такое исключение: Данный тип CollectionView не поддерживает изменения в своем SourceCollection из потока, отличного от потока Dispatcher.
Вопрос ещё актуален. Не получается обновить из стратегии коллекцию привязанную к DataGrid. Исключение из-за ошибки в потоке.
Думаю, лучше в классе MainWindow сделать специальный метод, в который, в качестве аргумента подается стакан, и уже в этом методе, в потоке пользовательского интерфейса (через Dispatch.Invoke или GuiAsync) работаем с коллекцией.
А так в принципе в C# устроено, что команда, запущенная из параллельного потока не может вернуть что-то в главный? Команда на возврат должна непременно вызываться из главного, Gui потока и возвращать в себя?
Это явление называется CallBack-ом, просьба параллельного потока вызвать себя из главного?
Думаю, да, в данном случае можно назвать этот вызов CallBack'ом. Вообще, CallBack'ом называют (обычно), когда передают делегат (указатель на метод), например, в другой метод.