c#datagridview在局域网中自动刷新
本文关键字:刷新 局域网 c#datagridview | 更新日期: 2023-09-27 18:21:24
我是c#的初学者,遇到了一个巨大的问题。一个前面有datagridview的应用程序(一个工作日的Termin计划)可以在带有MS Windows Server和MySQL数据库的局域网中的许多PC上工作。如何在没有任何操作的情况下(应用程序仅启动),在一个工作站上自动在所有其他PC上进行更改。我有一个数据和数据网格视图刷新的过程,我必须只知道何时必须启动这个过程,这意味着我必须知道其他工作站何时进行了任何更改。谢谢你的帮助!
一个简单的解决方案是使用计时器,当计时器过期时,您可以刷新网格视图。因此在定义的时间段内,它将被自动刷新。问题可能是,如果更新到经常更新,那么访问数据库的负载就会过载。为了防止这种情况,您可以制作一个服务器应用程序来处理所有数据
假设PC1正在启动客户端应用程序。
-
首先,它连接到服务器应用程序(服务器将客户端的引用存储在例如列表中)。
-
之后,PC1上的用户进行更改并单击保存,软件会将更改发送到服务器(例如,包含所有所需信息的自定义对象)。
-
服务器将更改保存到数据库
-
服务器应用程序向特定客户端发出响应(如果它工作或不工作)
-
如果成功,请向所有客户端发送一个自定义对象(例如,名为ChangesDoneEvent),指示已完成更改。
- 所有连接的客户端都将接收到该对象,并且现在知道必须刷新其网格视图
有关更多信息,请搜索C#多线程服务器套接字编程。对于通过网络发送自定义对象,您也会在互联网上找到许多资源,也许这将帮助您使用C#中的Tcpclient类发送和接收自定义对象
在表单上声明委托
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();
}
上面提供的解决方案实际上是处理这种情况的好方法。在实施之前,您可能还需要考虑潜在的倒退。客户端PC的IP可能会更改,因为您正在使用套接字。添加到列表中的对象引用可能处于故障状态。你可能需要考虑处理这个陷阱。