IvanB
|
Дата: 23.08.2013
Можно, это можно сделать разными путями: передать коллекцию в конструктор стратегии, использовать статическое публичное поле коллекции, передать коллекцию в стратегию через специальное поле, быть может, можно как-то еще. Пример использования статического поля: Код
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()
{
//TODO: using MainWindow.Stakan
base.OnStarted();
}
}
|
|
Спасибо:
|
|
|
|
|
Buratino
|
Дата: 23.08.2013
А, да! Класс MainWindow не указал. А как вернуть в поток стакан типа ObservableCollection<Quote> Stakan, через Dispatch.Invoke или GuiAsync...? Код
private void Process(MarketDepth md)
{
MainWindow.Stakan.AddRange(md);
}
Такое исключение: Данный тип CollectionView не поддерживает изменения в своем SourceCollection из потока, отличного от потока Dispatcher.
|
|
Спасибо:
|
|
|
|
|
Buratino
|
Дата: 24.08.2013
Вопрос ещё актуален. Не получается обновить из стратегии коллекцию привязанную к DataGrid. Исключение из-за ошибки в потоке.
|
|
Спасибо:
|
|
|
|
|
IvanB
|
Дата: 25.08.2013
Buratino Вопрос ещё актуален. Не получается обновить из стратегии коллекцию привязанную к DataGrid. Исключение из-за ошибки в потоке. Думаю, лучше в классе MainWindow сделать специальный метод, в который, в качестве аргумента подается стакан, и уже в этом методе, в потоке пользовательского интерфейса (через Dispatch.Invoke или GuiAsync) работаем с коллекцией.
|
|
Спасибо:
|
|
|
|
|
Buratino
|
Дата: 25.08.2013
IvanB Думаю, лучше в классе MainWindow сделать специальный метод, в который, в качестве аргумента подается стакан, и уже в этом методе, в потоке пользовательского интерфейса (через Dispatch.Invoke или GuiAsync) работаем с коллекцией.
А так в принципе в C# устроено, что команда, запущенная из параллельного потока не может вернуть что-то в главный? Команда на возврат должна непременно вызываться из главного, Gui потока и возвращать в себя?
|
|
Спасибо:
|
|
|
|
|
IvanB
|
Дата: 25.08.2013
Buratino IvanB Думаю, лучше в классе MainWindow сделать специальный метод, в который, в качестве аргумента подается стакан, и уже в этом методе, в потоке пользовательского интерфейса (через Dispatch.Invoke или GuiAsync) работаем с коллекцией.
А так в принципе в C# устроено, что команда, запущенная из параллельного потока не может вернуть что-то в главный? Команда на возврат должна непременно вызываться из главного, Gui потока и возвращать в себя? Это связано с архитектурой пользовательского интерфейса.
|
|
Спасибо:
|
|
|
|
|
Buratino
|
Дата: 27.08.2013
Это явление называется CallBack-ом, просьба параллельного потока вызвать себя из главного?
|
|
Спасибо:
|
|
|
|
|
IvanB
|
Дата: 29.08.2013
Buratino Это явление называется CallBack-ом, просьба параллельного потока вызвать себя из главного? Думаю, да, в данном случае можно назвать этот вызов CallBack'ом. Вообще, CallBack'ом называют (обычно), когда передают делегат (указатель на метод), например, в другой метод.
|
|
Спасибо:
|
|
|
|