Я начинаю с C# с огромной проблемой. Приложение с datagridview спереди (план Termin на один рабочий день) работает на многих ПК в локальной сети с MS Windows Server и с базой данных MySQL. Как я могу сделать изменения, сделанные на одной рабочей станции AUTOMATICALY на всех других ПК без каких-либо действий над ними (приложение только началось). У меня есть процедура для данных и обновления datagridview, я должен знать только, КОГДА Я должен начать эту процедуру, это означает, что я должен знать, КОГДА любая другая рабочая станция внесла какие-либо изменения. Спасибо за любую помощь!C# datagridview autorefresh in LAN
ответ
Простым решением будет использование таймера, и по истечении этого времени вы обновите gridview. поэтому на определенный период времени он будет обновляться автоматически. проблема может заключаться в том, что если вы часто обновляетесь, возникает перегрузка доступа к db. чтобы предотвратить это, вы можете сделать серверное приложение, которое обрабатывает все данные.
Предположим, что ПК 1 запускает клиентское приложение.
Сначала он подключается к серверному приложению (сервер хранит ссылку клиента, например, в списке).
После этого пользователь на ПК1 вносит изменения и нажимает кнопку «Сохранить», программное обеспечение отправляет изменения на сервер (например, пользовательский объект со всей необходимой информацией).
Сервер сохраняет изменения в БД
Serverapplication дать ответ конкретному клиенту, если он работал или не
Если он работал, Отправить пользовательский объект (например, с именем ChangesDoneEvent) в все клиенты, которые указывают, что изменения были сделаны.
- Все подключенные клиенты получат этот объект и теперь знают, что им необходимо обновить их gridview.
Для получения дополнительной информации просто поиск по C# многопоточных программирования сервера Socket. Для отправки пользовательских объектов по сети вы также найдете много ресурсов в Интернете, может быть, это поможет вам Sending and receiving custom objects using Tcpclient class in C#
Решение, приведенное выше, на самом деле является хорошим способом справиться с этим сценарием. Перед реализацией вы также можете подумать о возможном спаде. Возможно, IP-адрес клиентского ПК может измениться и с тех пор, как вы используете сокеты. Ссылка на объект, добавленная в список, может быть повреждена. Возможно, вам захочется подумать о том, как справиться с этой ловушкой.
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();
}
Есть ли в C# также возможность сделать что-то в качестве широковещательного обмена сообщениями - так что если один компьютер что-то сделал - другой знаю, что автоматически. – esoftic
Возможно, вы можете использовать некоторые библиотеки. Я думаю, что с этой библиотекой вы сможете справиться со всем, что хотите: http://www.networkcomms.net/. Для внесения изменений, вероятно, вы должны использовать TCP. для Broadcasting, что изменения были сделаны, вы можете использовать UDP Broadcasts для сети (если все компьютеры находятся в одной подсети, проще всего и быстрее, но сообщения могут быть потеряны, поэтому, возможно, один клиент не будет обновлять, если пакет потерян). Или вы можете удерживать все подключенные клиенты в списке и отправлять им объект, как описано в ответе. – user1519979