Доступ к объектам из классов
Atom
23.08.2013
Buratino


Можно ли получить доступ из стратегии к внешним коллекциям. Вроде этого:


    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();
        }
    }


Теги:


Спасибо:


IvanB

Фотография
Дата: 23.08.2013
Ответить


Buratino: Можно ли получить доступ из стратегии к внешним коллекциям. Вроде этого:


    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();
        }
    }

Можно, это можно сделать разными путями: передать коллекцию в конструктор стратегии, использовать статическое публичное поле коллекции, передать коллекцию в стратегию через специальное поле, быть может, можно как-то еще. Пример использования статического поля:


    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'ом называют (обычно), когда передают делегат (указатель на метод), например, в другой метод.

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy