2009-12-23 6 views
1

как этотОбмен данными между двумя приложениями

public class MyClass { 
    public static instance = new MyClass(); 
private List<int> idList; 
} 

. Я использую этот класс в двух разных приложениях окна. MyClass.instance.IdList.Add(1); Все данные в idList Я храню в файле и извлекаю информацию из этого файла. Я добавляю значение idList в одном приложении, и я получаю информацию idList в другом приложении. но он не показывает idList-контент во втором приложении, который добавляется при первой апликации. Как добиться этого?

+0

Просьба уточнить ваш вопрос - это очень трудно понять, что вы после –

+0

ли вы имеете в виду вы хотите перекрестный список процессов , или просто получить доступ к такому же списку из двух разных окон? – RichardOD

+0

ya. Я хочу получить доступ к тому же списку из двух разных оконных приложений – jolly

ответ

0

Почему бы вам не использовать xml в качестве посредника между двумя приложениями. Используйте XML для связи.

+0

XML немного тяжело передан для ID-списка. –

+0

Да, я использовал XML-файл для хранения данных в списке. И я дезертировал его во втором приложении. теперь работает нормально. – jolly

+0

Но мой опыт не очень хорош в очереди сообщений. Некоторое время он выбирает данные случайным образом из очереди. – Pankaj

4

Возможно, Remoting поможет вам. Это позволяет вам разрешать другим приложениям доступ к функциям в вашем серверном приложении через Интернет (или локальную сеть). Таким образом, код выполняется в серверном приложении. Вот пример: http://www.codeproject.com/KB/IP/Net_Remoting.aspx

3

Возможно, вы уже знаете об этом, но типы, объявленные static, являются локальными для одного процесса (приложения). При чтении вашего примера кажется, что вы ожидаете, что статический экземпляр будет доступен для общего доступа и доступен между приложениями. Это не тот случай.

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

+0

+1 для «статического» объяснения. Я думаю, что это то, что весело пытались сделать ... –

0

Если вы собираетесь использовать .Net 4.0, вы можете использовать Memory Mapped Files.

0

Как насчет использования SQL Server Compact Edition?

0

Я думаю, что это префект кандидат на Message Queue

С очередью сообщений, вы можете добавить идентификаторы очереди в одном приложении, и тянуть их в другом.

Эта страница дает хороший пример того, как реализовать очереди: Use Microsoft Message Queuing in C# for inter-process communication

MSDN от дает пример сервиса здесь: C#: A Message Queuing Service Application

0

очереди сообщений является лучшим способом общения. Однако убедитесь, что вам нужно включить компонент «Microsoft Message Queue», прежде чем вы сможете использовать эту услугу.

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

4

Вот несколько способов обмена данными между приложениями:

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

1) Использование ФОС - хост A службы WCF с следующей функциональностью [усилию: Умеренный]

// Обратите внимание на использование Publisher -Subscriber шаблон здесь (каждое приложение будет подписаться на сервис, услуга может быть организована всеми приложениями в определенной конечной точке, то есть сети.трубы: // локальный/NotificationService (Так как множество приложений будет пытаться провести ту же самую услугу только один бы добиться успеха, и это именно то, что мы хотим)

void Subscribe(object); 
void Unsubscribe(object); 

// Любой клиент, который хочет, чтобы добавить объект в списке будет вызывать Добавить

void Add(object objectToAdd); 

// перебирает каждый подписавшее приложение и отправить уведомление, что список изменился

void Notify(); 

// Возвращает текущее состояние списка

IEnumerable<object> GetYourList(); 

2) Использование буфера обмена[усилию: Простой]

3) Использование файловой системы & прослушивания уведомления об изменении файла [усилию: Simple]

4) Память отображенные файлы[усилию: Простой Умеренный]

0

В моем случае, у меня было 2 приложения

  1. службы WCF приложение приложений
  2. Окна

Я использовал Message Queue для преодоления этой проблемы обмена данными

  • Добавить, сколько потребуется очереди.
  • Его блокировка читается, поэтому ваше приложение не переполняет и не запускает CPU.
  • Достаточно надежно, нет Потеря данных.
  • Добавить заголовок вместе с каждым данным, чтобы узнать, какой тип данных это.

Как использовать:

  • Создать частные очереди.
  • вставьте данные в него с клиентской стороны.
  • другая сторона прочитайте и проанализируйте его.
Смежные вопросы