2014-09-11 2 views
0

Я начинаю с C# с огромной проблемой. Приложение с datagridview спереди (план Termin на один рабочий день) работает на многих ПК в локальной сети с MS Windows Server и с базой данных MySQL. Как я могу сделать изменения, сделанные на одной рабочей станции AUTOMATICALY на всех других ПК без каких-либо действий над ними (приложение только началось). У меня есть процедура для данных и обновления datagridview, я должен знать только, КОГДА Я должен начать эту процедуру, это означает, что я должен знать, КОГДА любая другая рабочая станция внесла какие-либо изменения. Спасибо за любую помощь!C# datagridview autorefresh in LAN

ответ

1

Простым решением будет использование таймера, и по истечении этого времени вы обновите gridview. поэтому на определенный период времени он будет обновляться автоматически. проблема может заключаться в том, что если вы часто обновляетесь, возникает перегрузка доступа к db. чтобы предотвратить это, вы можете сделать серверное приложение, которое обрабатывает все данные.

Предположим, что ПК 1 запускает клиентское приложение.

  1. Сначала он подключается к серверному приложению (сервер хранит ссылку клиента, например, в списке).

  2. После этого пользователь на ПК1 вносит изменения и нажимает кнопку «Сохранить», программное обеспечение отправляет изменения на сервер (например, пользовательский объект со всей необходимой информацией).

  3. Сервер сохраняет изменения в БД

  4. Serverapplication дать ответ конкретному клиенту, если он работал или не

  5. Если он работал, Отправить пользовательский объект (например, с именем ChangesDoneEvent) в все клиенты, которые указывают, что изменения были сделаны.

    1. Все подключенные клиенты получат этот объект и теперь знают, что им необходимо обновить их gridview.

Для получения дополнительной информации просто поиск по C# многопоточных программирования сервера Socket. Для отправки пользовательских объектов по сети вы также найдете много ресурсов в Интернете, может быть, это поможет вам Sending and receiving custom objects using Tcpclient class in C#

+0

Есть ли в C# также возможность сделать что-то в качестве широковещательного обмена сообщениями - так что если один компьютер что-то сделал - другой знаю, что автоматически. – esoftic

+0

Возможно, вы можете использовать некоторые библиотеки. Я думаю, что с этой библиотекой вы сможете справиться со всем, что хотите: http://www.networkcomms.net/. Для внесения изменений, вероятно, вы должны использовать TCP. для Broadcasting, что изменения были сделаны, вы можете использовать UDP Broadcasts для сети (если все компьютеры находятся в одной подсети, проще всего и быстрее, но сообщения могут быть потеряны, поэтому, возможно, один клиент не будет обновлять, если пакет потерян). Или вы можете удерживать все подключенные клиенты в списке и отправлять им объект, как описано в ответе. – user1519979

0

Решение, приведенное выше, на самом деле является хорошим способом справиться с этим сценарием. Перед реализацией вы также можете подумать о возможном спаде. Возможно, IP-адрес клиентского ПК может измениться и с тех пор, как вы используете сокеты. Ссылка на объект, добавленная в список, может быть повреждена. Возможно, вам захочется подумать о том, как справиться с этой ловушкой.

1

Declare Делегат на форме

public delegate void autocheck(); 
private System.Timers.Timer TTTimer = new System.Timers.Timer(); 

public void autofilldgv() 
{ 
    if (this.InvokeRequired) 
    { 
     this.Invoke(new autocheck(UpdateControls)); 
    } 
    else 
    { 
     UpdateControls(); 
    } 
} 
private void UpdateControls() 
{ 
    //call your method here 
    filldgv(); 

} 
void TTTimer_Elapsed(object sender System.Timers.ElapsedEventArgs e) 
{ 
    mymethod(); 
} 
public void mymethod() 
{ 
    //this method is executed by the background worker 
    autofilldgv(); 
} 
private void frm_receptionView_Load(object sender, EventArgs e) 
{ 
    this.TTTimer.Interval = 1000; //1 sec interval 
    this.TTTimer.Elapsed += new System.Timers.ElapsedEventHandler(TTTimer_Elapsed); 
    this.TTTimer.Start(); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^