Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
 Аватар для ut7du
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 161
Записей в блоге: 1

Форма возвращает значение

03.10.2018, 13:40. Показов 2474. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мое уважение ко всем участникам форума !
Есть формочка которая отсылает код (работает таймер) в порт и устройство подключенное к нему отвечает. Результат выводится
к примеру в Label.
Вопрос состоит в следующем: мне нужно чтобы программа возвращала значение которое индицируется в этом Label для того чтобы другие программы работающие на компе могли этот код считать.

Подскажите пожалуйста как это реализовать
Мое почтение друзья !
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.10.2018, 13:40
Ответы с готовыми решениями:

Форма в DLL возвращает строку
Доброго дня Всем! Прошу помощи в таком вопросе- я сделал диалог(модальная форма) и хочу его включать во все свои приложения. Диалог...

Созданная форма не возвращает(?) Handle
Доброго времени суток, господа программисты, будьте так любезны :) Суть: Попытки открытия другого приложения внутри windows формы(1...

Вторая форма возвращает ноль при закрывании
Добрый вечер. При клике на первой форме появляется вторая. На второй есть две кнопки, при нажатии на первую кнопку, первой форме...

20
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
03.10.2018, 14:55
ut7du, весьма не понятно и запутано, но постараюсь ответить
1. отрефакторить код, выделив бизнес логику
2. создать файл обмена или канал обмена между программами
3. Прочитать про программирование на C#.
0
 Аватар для ut7du
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 161
Записей в блоге: 1
03.10.2018, 15:09  [ТС]
Просто все как 3 копейки:
Работает таймер посылая в порт данные
C#
1
2
3
4
void IF_Timer_Tick(object sender, EventArgs e)
        {          
                sp.Write("IF;");
        }
Принимаю их
C#
1
2
3
4
5
// сам метод чтения порта
        void Sp_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            dataread = sp.ReadExisting();
        }
Обработка (событие Tick Timera) данных и вывод их в Label
C#
1
2
3
4
5
stroka = dataread.Substring(5, 8);
int freq = Convert.ToInt32(stroka);
stroka = stroka.Insert(2, ".");
stroka = stroka.Insert(6, ".");
label1.Text = stroka;
Так вот эту строку (stroka) мне нужно возвращать из этой форму до тех пор пока я не закрою данную форму.
А другая программа (тоже Windows Form) при работе первой формы (это 2 разных проекта) опрашивала бы первую форму и забирала данные, делая вывод у себя к примеру в textBox
Надеюсь "ферштейн" ?

Может Client организовать в этой 1 форме да и толкать данные в порт ? А вторая форма работала бы как сервер ? Но тут очень важно для меня быстродействие (пробовал так но все это очень уж медленно работало и я отказался от этой затеи)
Скорее всего не грамотно делал
Подскажите please.....
0
 Аватар для ut7du
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 161
Записей в блоге: 1
04.10.2018, 19:02  [ТС]
Неужели никто не подскажет ?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
05.10.2018, 01:22
Цитата Сообщение от ut7du Посмотреть сообщение
Так вот эту строку (stroka) мне нужно возвращать из этой форму до тех пор пока я не закрою данную форму.
А другая программа (тоже Windows Form) при работе первой формы (это 2 разных проекта) опрашивала бы первую форму и забирала данные, делая вывод у себя к примеру в textBox
Надеюсь "ферштейн" ?
Каким образом опрашивала?
Вам же прояснили.
Цитата Сообщение от V_Monomax Посмотреть сообщение
2. создать файл обмена или канал обмена между программами
Самый простой способ. Создать общий файл для Ваших программ. Одна программа в него записывает, остальные время от времени проверяют его содержимое.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
05.10.2018, 08:46
Цитата Сообщение от ut7du Посмотреть сообщение
Надеюсь "ферштейн" ?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Цитата Сообщение от V_Monomax Посмотреть сообщение
2. создать файл обмена или канал обмена между программами
Самый простой способ. Создать общий файл для Ваших программ. Одна программа в него записывает, остальные время от времени проверяют его содержимое.
нихт фирштейн?
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
05.10.2018, 09:54
Цитата Сообщение от V_Monomax Посмотреть сообщение
нихт фирштейн?
Показал, что Вы уже ответили на его вопрос.
0
 Аватар для V_Monomax
1406 / 1260 / 20
Регистрация: 09.08.2011
Сообщений: 2,319
Записей в блоге: 1
05.10.2018, 10:15
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Показал, что Вы уже ответили на его вопрос.
Элд Хасп, простите тот пост полностью относиться к ut7du.
0
 Аватар для ut7du
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 161
Записей в блоге: 1
05.10.2018, 19:10  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Самый простой способ. Создать общий файл для Ваших программ.
Не подойдет ! Нужен режим реального времени. Сервер ! Но с СОМ объектами я не работал нет опыта. С TCP работал ну очень медленно - не подойдет
Остальные посты - словоблудие - или как сейчас модно выражаться -Троллинг

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Каким образом опрашивала?
Ждет сообщения например с 8000-го порта - т.е. опрашивает например в в таймере или в потоке.....
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
05.10.2018, 19:44
Цитата Сообщение от ut7du Посмотреть сообщение
Не подойдет ! Нужен режим реального времени.
Это тогда или объявить событие в первой форме и другие должны подключаться к нему, или передать в первую делегат из второй и первая при изменении его будет вызывать. Фактически это одно и тоже, но в разной обёртке.
По другому реального времени не получится.
Наверное, можно ещё сделать привязку к общему источнику, но тогда надо будет подключать ещё какой-то общий источник. Но это тоже, фактически, просто иной способ организации события+обработчик.
0
 Аватар для ut7du
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 161
Записей в блоге: 1
05.10.2018, 21:51  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Это тогда или объявить событие в первой форме и другие должны подключаться к нему, или передать в первую делегат из второй и первая при изменении его будет вызывать. Фактически это одно и тоже, но в разной обёртке.
Это 2 разных проекта. Если бы это в одном проекте - я уже давно забыл бы про эту работу
Давайте объясню еще раз популярно

Есть программка (форма не консоль) которая опрашивает СОМ порт и устройство подключенное к этому порту отвечает и отсылает свои данные в форму и передает данные во "внешний мир" то бишь какой то порт например 9000 . Совершенно другая программка (форма не консоль) - я ее запускаю слушает например порт 9000 и вытаскивает из этого порта те данные которые передало физическое -устройство.

При работе с сокетами - быстродействие мало. Физическое у-во подключенное например к порту СОМ2 передало за перидо 100 мсек - 50 строк а другая программка не реагирует так быстро. Я это к примеру
Надеюсь я объяснил доходчиво - вот за этой помощью я и обратился сюда на форум уважаемые коллеги по цеху
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
06.10.2018, 00:08
Цитата Сообщение от ut7du Посмотреть сообщение
Это 2 разных проекта. Если бы это в одном проекте - я уже давно забыл бы про эту работу
Давайте объясню еще раз популярно
Я понял, что это разные проекты. Но каким образом это может помещать? Вы же пользуетесь различными библиотеками без помех. Так же пользуйтесь из одного проекта классами другого проекта.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
06.10.2018, 01:31
ut7du, посмотрите немного переделанный пример с интернета.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
namespace Запись_в_память
{
    class Program
    {
        static void Main(string[] args)
        {
            MemoryMappedFile sharedMemory = null;
 
            while (true)
            {
                Console.WriteLine("Для выхода из программы нажмите Enter в пустой строке");
                Console.WriteLine("Введите сообщение");
                //Ввод выражения для записи в общую память
                char[] message = Console.ReadLine().ToCharArray();
                if (sharedMemory != null) sharedMemory.Dispose();
                //Размер введенного сообщения
                int size = message.Length;
                if (size == 0) return;
                //Создание участка разделяемой памяти
                //Первый параметр - название участка, 
                //второй - длина участка памяти в байтах: тип char  занимает 2 байта 
                //плюс четыре байта для одного объекта типа Integer
                sharedMemory = MemoryMappedFile.CreateNew("MemoryFile", size * 2 + 4);
                //Создаем объект для записи в разделяемый участок памяти
                using (MemoryMappedViewAccessor writer = sharedMemory.CreateViewAccessor(0, size * 2 + 4))
                {
                    //запись в разделяемую память
                    //запись размера с нулевого байта в разделяемой памяти
                    writer.Write(0, size);
                    //запись сообщения с четвертого байта в разделяемой памяти
                    writer.WriteArray<char>(4, message, 0, message.Length);
                }
 
                Console.WriteLine("Сообщение записано в разделяемую память");
            }
        }
    }
}
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
namespace Чтение_с_памяти
{
    class Program
    {
        static void Main(string[] args)
        {
            //Массив для сообщения из общей памяти
            char[] message;
            string mess = "", messOld = "";
            //Размер введенного сообщения
            int size;
            while (true)
            {
                try
                {
 
 
                    //Получение существующего участка разделяемой памяти
                    //Параметр - название участка
                    MemoryMappedFile sharedMemory = MemoryMappedFile.OpenExisting("MemoryFile");
                    //Сначала считываем размер сообщения, чтобы создать массив данного размера
                    //Integer занимает 4 байта, начинается с первого байта, поэтому передаем цифры 0 и 4
                    using (MemoryMappedViewAccessor reader = sharedMemory.CreateViewAccessor(0, 4, MemoryMappedFileAccess.Read))
                    {
                        size = reader.ReadInt32(0);
                    }
 
                    //Считываем сообщение, используя полученный выше размер
                    //Сообщение - это строка или массив объектов char, каждый из которых занимает два байта
                    //Поэтому вторым параметром передаем число символов умножив на из размер в байтах плюс
                    //А первый параметр - смещение - 4 байта, которое занимает размер сообщения
                    using (MemoryMappedViewAccessor reader = sharedMemory.CreateViewAccessor(4, size * 2, MemoryMappedFileAccess.Read))
                    {
                        //Массив символов сообщения
                        message = new char[size];
                        reader.ReadArray<char>(0, message, 0, size);
                        sharedMemory.Dispose();
                        mess = new string(message);
                    }
                    if (mess != messOld)
                    {
                        messOld = mess;
                        Console.WriteLine("Получено сообщение :");
                        Console.WriteLine(message);
                        Console.WriteLine("Для выхода из программы нажмите Ctrl+C");
                    }
                }
                catch (Exception)
                {
 
                }
                Thread.Sleep(100);
            }
        }
    }
}
Вложения
Тип файла: 7z Связь между приложениями.7z (104.5 Кб, 6 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
06.10.2018, 10:55
Вот Вам ещё пример со связью приложений через событие
Вложения
Тип файла: 7z Связь между приложениями.7z (189.9 Кб, 10 просмотров)
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
06.10.2018, 12:15
Так же можете воспользоваться API "user32.dll" функция "SendMessage".
0
 Аватар для ut7du
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 161
Записей в блоге: 1
06.10.2018, 17:15  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
ut7du, посмотрите немного переделанный пример с интернета.
За это спасибо ! Буду изучать. Жму руку
Вот как другие делают
http://www.dxatlas.com/OmniRig/Files/OmniRig.zip
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
06.10.2018, 18:12
Цитата Сообщение от ut7du Посмотреть сообщение
Вот как другие делают
http://www.dxatlas.com/OmniRig/Files/OmniRig.zip
Но это же экзешник - там не посмотришь способ, приёмы реализации.

Добавлено через 5 минут
Вам для варианта реализации надо определиться с пересылаемым объёмом информации.
  • Если большой и редко, то MemoryMappedFile
  • Если маленький, часто и есть возможность переделать на запуск одного приложения из другого, то событие.
  • Если маленький, часто и запуск приложений не зависим друг от друга, то API.
0
 Аватар для ut7du
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 161
Записей в блоге: 1
07.10.2018, 13:11  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Но это же экзешник - там не посмотришь способ, приёмы реализации.
Там есть исходник на Паскале - но я в нем вообще не силен

Добавлено через 2 минуты
Цитата Сообщение от Элд Хасп Посмотреть сообщение
надо определиться с пересылаемым объёмом информации.
Объем информации - например вот такая строка - "14.032.000 USB" - но информация обновляется в Label.text - быстро 100 мсек
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16150 / 11271 / 2890
Регистрация: 21.04.2018
Сообщений: 33,142
Записей в блоге: 2
07.10.2018, 15:03
Цитата Сообщение от ut7du Посмотреть сообщение
Объем информации - например вот такая строка - "14.032.000 USB" - но информация обновляется в Label.text - быстро 100 мсек
Тогда MemoryMappedFile - не для этой ситуации. Выбирайте из двух других. основания выбора я уже писал.

Добавлено через 1 минуту
Разобрались с примером связи через событие (пост #14)?

Добавлено через 1 минуту
Цитата Сообщение от ut7du Посмотреть сообщение
Там есть исходник на Паскале - но я в нем вообще не силен
Я тоже.
0
 Аватар для ut7du
0 / 0 / 0
Регистрация: 24.06.2016
Сообщений: 161
Записей в блоге: 1
07.10.2018, 20:32  [ТС]
Я решил проблему !
Работаю через файл. Расшарил его и обрабатываю его в блоке
C#
1
2
3
4
try
{
}
catch() {}
Один проект пишет туда каждые 100 мсек а второй проект (в данный момент тестовая программа) читает его с интервалом 150 мсек

Спасибо огромное за помощь !
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.10.2018, 20:32
Помогаю со студенческими работами здесь

Как вернуть в запросе значение по умолчанию, если SELECT возвращает NULL или ничего не возвращает?
Добрый день! Например я хочу чтобы донное выражение возвращало мне 0 или скажем 1, если результатом выражения rating вернется NULL: ...

Нужна помощ. Форма поиска не возвращает запись.
Форма поиска не возвращает запись в вызывающую форму. В самом VB6.0, всё работает, а когда я скомпилировал в (exe) фал, выдаёт ошибку...

Форма поиска на Joomla возвращает голую форму
Доброе время суток, проблема следующая: на некоторые запросы поиска, например &quot;222&quot; и еще какие-то слова, не все, вместо...

Форма обратной связи: admin-ajax.php возвращает 0
Форма обратной связи. admin-ajax.php возвращает 0. При этом до переноса страницы на wordpress форма работала. Пожалуйста, помогите решить...

Не работает форма подписки - всегда возвращает одинаковую ошибку
Приветствую, уважаемые. Есть посадка printbar.site/index5.html (адрес тестовый). На нем висит посадка с формой подписки. Подписка...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru