Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/20: Рейтинг темы: голосов - 20, средняя оценка - 4.60
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
#1

Взаимодействие между двумя приложениями

19.06.2015, 01:10. Просмотров 3654. Ответов 62
Метки нет (Все метки)

Я читал возможные варианты и из того, что нашел, если верно понял не подходит ничего (отрицать не буду, еще не отоспался после сданного диплома и могу быть не внимателен, прошу простить)



имею 2 приложения, ссылки будут ниже
идея: имеется 2 приложения одно главное с действиями и второе только просмотр.
в первом приложении(DF Admin) выбираю определенный чекбокс и в приложении втором (DF User)
меняется цвет лейбла.

как быть? использовать файл, если да, то какой чтобы не тормозило или исправно работало, ведь копий обоих программ в итоге будет открыто несколько.. наплодить текстовых файлов с единицами/нулями и в втором приложении наставить везде бесконечных циклов для чтения? а насколько это будет верно?

есть ли какой-либо способ чтобы нажать например чекбокс приложения 1 (DF Admin) автоматически во всех открытых копиях программы 1 ставился этот чекбокс и конечно же во всех открытых копиях программы 2(DF User) менялся цвет.


программы:
Кликните здесь для просмотра всего текста
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.06.2015, 01:10
Ответы с готовыми решениями:

Взаимодействие между двумя .NET приложениями
Всем доброго дня! Подскажите, что и как лучше использовать для передачи...

Общение между двумя приложениями
В процессе разработки приложения wpf я окончательно убедился что моя программа...

Сериализация между приложениями
В MS VS 2010 создал решение и в нём 2 проекта: Client и Server. В каждом...

Передача объектов между приложениями
Есть ли способ напрямую передать объекты из одного .NET приложения в другое?...

Обмен данных между приложениями
Добрый день! Такая задача, клиент базы данных Oracle стоить 32 битный, а...

62
aquaMakc
472 / 385 / 68
Регистрация: 14.02.2014
Сообщений: 1,881
Завершенные тесты: 1
24.06.2015, 13:55 #21
Casper-SC, он в теме давал ссылку на свой код. Я посмотрел. До WCF ему ещё далеко.
1
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:04 #22
aquaMakc, скачал, посмотрел, слишком мало кода, чтобы делать выводы, единственно "режет глаз" портянка из обработчиков, в которых меняется только номер. Ну хоть номер этот передаётся в метод, а не дублируется код )

Добавлено через 2 минуты
И вообще, для начала надо бы оба проекта запихать в одно решение. А то напрягает между студиями переключаться, да и наверняка у них будут общие библиотеки, всё это поддерживать проще в одном решении.
1
aquaMakc
24.06.2015, 14:05
  #23

Не по теме:

Casper-SC, в принципе достаточно и такого небольшого куска, чтобы примерно оценить уровень. В этом нет ничего страшного, все начинали с азов. Главное - не бросать и не прыгать через ступени - толку никакого, только потеряное время.

0
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:08 #24
aquaMakc, я не пойму, в итоге-то, что ему делать? На сокетах?
1
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
24.06.2015, 14:08  [ТС] #25
вы можете исправить чтобы работали циклы бесконечные или таймеры (с ними у меня поладить тоже не удалось)
чтобы криво - но работало через файлы. мне нужно сейчас хоть что-то отдать и я уже разбираю wcp
0
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:14 #26
andryshka69, какие циклы? Ты о чём вообще?

Добавлено через 13 секунд
В проектах ничего такого не вижу.
1
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
24.06.2015, 14:15  [ТС] #27
если их добавлю сам - то они работать не будут.. все виснет

ставлю метод в form_load
в нем бесконечный цикл и все висит - форма даже не открывается..
ставлю в form_shown ничего не происходит
0
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:17 #28
Цитата Сообщение от andryshka69 Посмотреть сообщение
в нем бесконечный цикл и все висит - форма даже не открывается..
А что циклы делают?

Добавлено через 50 секунд
Если это проект не тестовый, не для самообучения, а будет использоваться в работе, рекомендую сразу нормально делать, а не с всякими файлами экспериментировать.

Добавлено через 43 секунды
Так же, к примеру, ты не умеешь использовать таймер. Создавай проект, там пробуй, когда всё норм, сохраняй. Потом как забылось, открыл, глянул. Я так делал, когда учил.
1
aquaMakc
472 / 385 / 68
Регистрация: 14.02.2014
Сообщений: 1,881
Завершенные тесты: 1
24.06.2015, 14:19 #29
Casper-SC, да, я предлагаю на сокетах. Это намного проще. По крайней мере было для меня. Если использовать асинхронные методы - то даже не надо на потоках заморачиваться.

andryshka69, ты сначала для самого себя представь архитектуру программы. Как она должна работать. И не так - сервер, клиент, между ними файл. Подробно - как как работает сервер, что, как и когда он должен писать в файл. Где этот файл должен располагаться. Что должен делать клиент, как читать файл, что должно происходить при чтении. В конце концов, даже в учебных заведениях сначала учат блок-схемы рисовать.

Пока этого нет я твои посты читаю "сделайте мне хорошо".
2
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:26 #30
Цитата Сообщение от aquaMakc Посмотреть сообщение
Если использовать асинхронные методы - то даже не надо на потоках заморачиваться.
DataManager.cs
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
        /// <summary>
        /// Отправить заявку оператору
        /// </summary>
        /// <param name="appNumber"></param>
        public bool SendApplicationToOperator(int appNumber)
        {
            try
            {
                var res = _dataService.SendApplicationToOperator(Constants.LineNumber, appNumber);
                if (!string.IsNullOrEmpty(res.Error) || res.Result != DbOperationResult.Success)
                {
                    string text = string.Format("_dataService.SendApplicationToOperator(){0}{1}", Environment.NewLine, res.Error);
                    LogManager.Logger.AppendText(text);
                }
 
                return res.Result == DbOperationResult.Success;
            }
            catch (Exception ex)
            {
                HandleException(ex);
            }
 
            return false;
        }
MainViewModel.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        public RelayCommand<ApplicationViewModel> SendSelectedAppCommand
        {
            get
            {
                return _sendSelectedAppCommand ?? (_sendSelectedAppCommand = new RelayCommand<ApplicationViewModel>(
                    (app) =>
                    {
                        Task.Factory.StartNew(() =>
                        {
                            DataManager.Instance.SendApplicationToOperator(app.Id);
                        });
                    }));
            }
        }
Вот посмотри, тут я где-то парюсь, что сложно работать с потоками?

Где _dataService - это WCF канал с netTcpBinding

Добавлено через 2 минуты
Не знаю, в общем, как по мне, так в WCF проще.

Добавлено через 2 минуты
Или ещё лучше (async await):
DataManager.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        /// <summary>
        /// Получить список авторизованных пользователей
        /// </summary>
        /// <returns></returns>
        public Task<UserInfo[]> GetAuthorizedUserInfosAsync()
        {
            return Task<UserInfo[]>.Factory.StartNew(() =>
            {
                try
                {
                    return _dataService.GetAuthorizedUserInfos();
                }
                catch (Exception ex)
                {
                    HandleException(ex);
                    return null;
                }
            });
        }
UserAdminVm.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
        public async void ReloadData()
        {
            if (!DataManager.Instance.CheckConnection())
            {
                return;
            }
 
            IsBusy = true;
            UserInfo[] infos = await DataManager.Instance.GetAuthorizedUserInfosAsync();
            if (infos != null) 
            {
                FillCollection(infos);
            }
            IsBusy = false;
        }
 
        private void FillCollection(UserInfo[] infos)
        {
            UserInfos = new ObservableCollection<UserInfoVm>(infos.Select(inf => new UserInfoVm(inf)));
        }
1
aquaMakc
472 / 385 / 68
Регистрация: 14.02.2014
Сообщений: 1,881
Завершенные тесты: 1
24.06.2015, 14:26 #31
Casper-SC, ) я не говорил что в WCF надо париться с потоками. Имелись в ввиду синхронные методы сокетов. WCF сложна для новичков повышенным уровнем абстракции, по сравнению с обычными приложениями.
1
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:28 #32
aquaMakc, возможно ты и прав. Я бы на его месте попробовал оба варианта и сделал для себя выводы.
1
aquaMakc
472 / 385 / 68
Регистрация: 14.02.2014
Сообщений: 1,881
Завершенные тесты: 1
24.06.2015, 14:29 #33
WCF хорошая, годная технология. Я не спорю. Я говорю, что до неё надо дойти через более простые вещи. Для начала хотябы с циклами разобраться и понять, почему бесконечный цикл в Form1_load() вешает приложение ).
1
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:33 #34
Цитата Сообщение от aquaMakc Посмотреть сообщение
Для начала хотябы с циклами разобраться и понять, почему бесконечный цикл в Form1_load() вешает приложение ).
Это да, согласен. И ещё нужно для себя хорошо уяснить такие вещи, как ссылочные типы и типы значений. Как работают ref и out в параметрах методов. Чтобы вообще чётко понимать, что происходит в реале. Кстати, да, если этого не понимать, то как вообще сообразить, что на сервере поднялся новый экземпляр DataService, который работает в режиме сессии или в режиме PerCall, то есть на каждый вызов новый экземпляр. Если этих вещей не понимать, то будет тяжко и непонятно, что и почему.
1
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
24.06.2015, 14:34  [ТС] #35
вешает приложение потому что во время загрузки запускаю бескон. цикл который не дает самой форме появится.

кто может адаптировать свой код под мое приложение?

мне бы сейчас любую рабочую версию. сроки жмут ..

не сочтите за наглость
0
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:36 #36
Плюс желательно знать, где залочить, где применить потокобезопасную коллекцию и т.д. Понимать, что есть локальные для метода переменные и есть общие и что делать, если метод вызвался в нескольких потоках. То есть повлияет это как-то на работу или там ничего не нужно синхронизировать.

Добавлено через 38 секунд
andryshka69, попробую помочь позже, но ничего не обещаю. Сейчас на работе чуть занят.

Добавлено через 32 секунды
Пока глянь это: https://bitbucket.org/CasperSC/clientserverapp

Добавлено через 23 секунды
Тут кому-то помог было дело, по конкретному вопросу.
1
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
24.06.2015, 14:41  [ТС] #37
я пока вижу выход с кнопкой "старт" ...
0
Casper-SC
Эксперт .NET
3602 / 1814 / 352
Регистрация: 27.03.2010
Сообщений: 5,106
Записей в блоге: 1
24.06.2015, 14:47 #38
Цитата Сообщение от andryshka69 Посмотреть сообщение
я пока вижу выход с кнопкой "старт" ...
Не понял. Вот, если ты про ссылку: https://bitbucket.org/CasperSC/clientserverapp/downloads
1
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
24.06.2015, 15:04  [ТС] #39
это я для себя - рассуждаю
0
aquaMakc
472 / 385 / 68
Регистрация: 14.02.2014
Сообщений: 1,881
Завершенные тесты: 1
24.06.2015, 17:38 #40
Держи. Сырое решение на сокетах. 4 Framework (чтоб на ХР работало)
https://yadi.sk/d/P-EX1v43hT7cL

Добавлено через 1 час 18 минут
и да, портянку китайского кода в обработчике события можно заменить на:
C#
1
2
3
4
5
            for (int i = 0; i < 10; i++)
                if (flags[i] == 0)
                    (this.Controls["label" + (i + 1).ToString()] as Label).BackColor = Color.Gray;
                else
                    (this.Controls["label" + (i + 1).ToString()] as Label).BackColor = Color.Red;
1
24.06.2015, 17:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2015, 17:38

Универсальный обмен данными между приложениями
Посоветуйте, пожалуйста, подход для решения следующей штуки: Передача данных...

Как организовать обмен данными между приложениями по интернету
Здравствуйте! Подскажите пожалуйста, каким образом можно организовать обмен...

Передача данных между приложениями без сохранения буферного файла
Здравствуйте! Я создаю на C# библиотеку, которая реализует интеграцию 2...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru