DDE и поток...
От: ronik  
Дата: 24.08.15 11:51
Оценка: :)
Всем привет!
Работаю сейчас над взаимодействием двух программ по DDE, т.е. сервер как таковой уже есть, пишу клиента который опрашивает некоторое устройство и по DDE передаёт значения серверу! И столкнулся с такой проблемой: если передавать значения например по таймеру или по кнопке, то всё ок... ну а если передавать в потоке, то значения не летят...
Так работает:
private void Timer_Update_Tick(object sender, EventArgs e)
{
    To_Server.SendToEms9(l);
    // ThreadProc();    // если например убрать предыдущую строку а эту раз комментировать,  то так тоже будет работать
}



А вот так уже отказывается:
private void Form1_Load(object sender, EventArgs e)
{
    if (OpenComPort())
        {
                Tthread = new Thread(ThreadProc);
                Tthread.Start();
        }
        else
        {
            LogsWrite("Невозможно открыть " + portT.PortName + "!");
        }
}

private void ThreadProc()
{
     while (true)
        {
            To_Server.SendToEms9(l);
    }
}

Все функции одного класса, не могу понять в чём разница — из потока я отрабатываю функцию, или по кнопке...
Возможно, что-то связано с работой потоков? Кто сталкивался, разъясните ни сведущему!
Visual Studio 2013, C#
Re: DDE и поток...
От: vmpire Россия  
Дата: 24.08.15 13:14
Оценка: +1
Здравствуйте, ronik, Вы писали:

R>Всем привет!

R>Работаю сейчас над взаимодействием двух программ по DDE, т.е. сервер как таковой уже есть, пишу клиента который опрашивает некоторое устройство и по DDE передаёт значения серверу! И столкнулся с такой проблемой: если передавать значения например по таймеру или по кнопке, то всё ок... ну а если передавать в потоке, то значения не летят...
...
R>Все функции одного класса, не могу понять в чём разница — из потока я отрабатываю функцию, или по кнопке...
R>Возможно, что-то связано с работой потоков? Кто сталкивался, разъясните ни сведущему!
R>Visual Studio 2013, C#
Разница, вероятно, в том, как работает DDE. Вообще, если есть выбор, я бы DDE не использовал, не очень надёжная это вещь.
DDE использует сообщения Windows, которые рассылаются окнам. Соответственно, в потоке-передатчике, чтобы получить ответ, должно быть окно и цикл обработки оконных сообщений.
В главном треде, оно, очевидно, есть. В только что созданном — нет.
Re[2]: DDE и поток...
От: ronik  
Дата: 28.08.15 07:53
Оценка:
R>>Все функции одного класса, не могу понять в чём разница — из потока я отрабатываю функцию, или по кнопке...
R>>Возможно, что-то связано с работой потоков? Кто сталкивался, разъясните ни сведущему!
R>>Visual Studio 2013, C#
V>Разница, вероятно, в том, как работает DDE. Вообще, если есть выбор, я бы DDE не использовал, не очень надёжная это вещь.
V>DDE использует сообщения Windows, которые рассылаются окнам. Соответственно, в потоке-передатчике, чтобы получить ответ, должно быть окно и цикл обработки оконных сообщений.
V>В главном треде, оно, очевидно, есть. В только что созданном — нет.
И снова здрасте!
Ну что, по рылся, по мучался и кое-что необычное для себя обнаружил... И так, испытания проводились с помощью двух конфигураций:
1. Windows 8.1 + VS 2013 Up5
2. Windows 7 SP1 + VS 2015
Проекты WinForms создавал как нормальный чел. с использованием новейшего framework'а (4.5.1), чем собственно говоря и поплатился... Обмен по DDE не работает ни с одним framework кроме 3.5, но и тут ещё не всё... Нужно сказать, что совершенно случайно обнаружил особенность... Т.е. если запускать программу из студии — обмена не будет, ну а если запустить исполняемый файл программы из проводника — всё ок! Чем это можно объяснить не знаю!
Да вот ещё, только, что нашёл, если снять галочку в свойствах проекта на "Включить ведущий процесс Visual Studio" — то из студии тоже работает!!!
Отредактировано 28.08.2015 8:12 ronik . Предыдущая версия .
Re[3]: DDE и поток...
От: Sinix  
Дата: 28.08.15 09:45
Оценка:
Здравствуйте, ronik, Вы писали:

R>И снова здрасте!


Кэп:
1. Использовать DDE в 2015 году — это или изощрённое эстетство или некрофилия. Чем вам WCF и ко не подходят?

2. "не работает ни с одним framework кроме 3.5" — вы что-то делаете не так. Из кандидатов — разрядность процесса, разные уровни изоляции, запуск под отладкой с настройками по умолчанию (в свежих студиях оно емнип поломано каким-то странным образом), ошибки в interop-коде, ошибки в используемых библиотеках итд. В любом из вариантов жаловаться "оно поломалось" — неправильный подход к решению проблемы

3. Блин, оно же умерло и воняло ещё в прошлом веке. Зачем?
Re[4]: DDE и поток...
От: ronik  
Дата: 28.08.15 10:11
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, ronik, Вы писали:


R>>И снова здрасте!


S>Кэп:

S>1. Использовать DDE в 2015 году — это или изощрённое эстетство или некрофилия. Чем вам WCF и ко не подходят?

S>2. "не работает ни с одним framework кроме 3.5" — вы что-то делаете не так. Из кандидатов — разрядность процесса, разные уровни изоляции, запуск под отладкой с настройками по умолчанию (в свежих студиях оно емнип поломано каким-то странным образом), ошибки в interop-коде, ошибки в используемых библиотеках итд. В любом из вариантов жаловаться "оно поломалось" — неправильный подход к решению проблемы


S>3. Блин, оно же умерло и воняло ещё в прошлом веке. Зачем?


1,3. Ну на самом деле без вариантов, есть уже существующий сервер к которому необходимо привязаться по DDE...
2. Не много оскорбило — "жаловаться", я ни в коем случае не жалуюсь — боже упаси... Решение проблемы, как в том фильме: "Будем искать..."
P.S. Хотя нужно сказать есть ещё вариант, написать OPC клиента... Но на сколько знаю, тема не простая!
Re[4]: DDE и поток...
От: romangr Россия  
Дата: 31.08.15 14:07
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Кэп:

S>1. Использовать DDE в 2015 году — это или изощрённое эстетство или некрофилия. Чем вам WCF и ко не подходят?

Ну предложите другой способ более-менее унифицированным образом получать котировки с eSignal, NetInvestor, MT4 и целый ряд других терминалов могу назвать.
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 67>>
Re[5]: DDE и поток...
От: Sinix  
Дата: 31.08.15 14:48
Оценка:
Здравствуйте, romangr, Вы писали:

R>Ну предложите другой способ более-менее унифицированным образом получать котировки с eSignal, NetInvestor, MT4 и целый ряд других терминалов могу назвать.


Если оф.API не подходят — никакого. Но они у всех почти есть, навскидку:
http://www.esignal.com/development-tools/consolidated-data-feed-API.aspx
http://www.netinvestor.ru/niapi.aspx
http://www.metatrader4.com/en/brokers/api

У топикстартера стартовый пост был про "сервер есть, пишу клиента, хочу заюзать DDE". На это и ответил.
Re[6]: DDE и поток...
От: romangr Россия  
Дата: 01.09.15 07:39
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Здравствуйте, romangr, Вы писали:


R>>Ну предложите другой способ более-менее унифицированным образом получать котировки с eSignal, NetInvestor, MT4 и целый ряд других терминалов могу назвать.


S>Если оф.API не подходят — никакого. Но они у всех почти есть, навскидку:

S>http://www.esignal.com/development-tools/consolidated-data-feed-API.aspx
S>http://www.netinvestor.ru/niapi.aspx
S>http://www.metatrader4.com/en/brokers/api

S>У топикстартера стартовый пост был про "сервер есть, пишу клиента, хочу заюзать DDE". На это и ответил.


Безусловно. Мы даже сравнивали по исигналу, что там по DDE, а что по API.
В общем, DDE — это технология устаревшая, тем не менее, используется и в хвост и в гриву.
NDDE помогает.
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 67>>
Re[3]: DDE и поток...
От: okman Беларусь https://searchinform.ru/
Дата: 01.09.15 09:25
Оценка:
Здравствуйте, ronik, Вы писали:

R>>>если запускать программу из студии — обмена не будет, ну а если запустить исполняемый файл программы из проводника — всё ок!

R>>>Чем это можно объяснить не знаю!

Скорее всего, из-за UAC (точнее говоря, из-за UIPI). Подробнее здесь:

Windows Integrity Mechanism Design
https://msdn.microsoft.com/en-us/library/bb625963.aspx
Re[4]: DDE и поток...
От: ronik  
Дата: 01.09.15 12:16
Оценка:
Да спасибо, вероятно, но я выше писал, что снимая галочку в свойствах проекта "Включить ведущий процесс Visual Studio" — всё отлично работает! И нужно сказать, что с Framework 4.0 то же идёт обмен...
O>Скорее всего, из-за UAC (точнее говоря, из-за UIPI). Подробнее здесь:

O>Windows Integrity Mechanism Design

O>https://msdn.microsoft.com/en-us/library/bb625963.aspx
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.