我是c#的初学者,有一个很大的问题。 前面有datagridview的应用程序(一个工作日的终端计划)可以在许多具有MS Windows Server和MySQL数据库的局域网中运行。 如何在所有其他PC上的一台工作站AUTOMATICALY上进行更改而不对它们执行任何操作(仅启动应用程序)。 我有一个数据和datagridview刷新的过程,我必须知道什么时候我必须启动这个过程,这意味着我必须知道什么时候任何其他工作站做了任何更改。 谢谢你的帮助!
答案 0 :(得分:1)
一个简单的解决方案是使用计时器,当它过去时,你刷新gridview。所以在定义的时间段内它会自动刷新。问题可能是,如果您经常更新,那么访问数据库会出现过载。为了防止这种情况,您可以进行处理所有数据的服务应用程序
假设PC 1正在启动客户端应用程序。
首先它连接到服务器应用程序(服务器将客户端的引用存储在例如列表中)。
之后,PC1上的用户进行更改并单击“保存”,软件会将更改发送到服务器(例如,包含所有所需信息的自定义对象)。
服务器将更改保存到数据库
Serverapplication会对特定客户做出回应,如果有效的话
如果有效,请将自定义对象(例如名为ChangesDoneEvent)发送给指示已完成更改的所有客户端。
有关详细信息,请搜索C#多线程服务器套接字编程。要通过网络发送自定义对象,您也可以在互联网上找到许多资源,这可能会对您有所帮助Sending and receiving custom objects using Tcpclient class in C#
答案 1 :(得分:1)
在表单上声明代表
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();
}
答案 2 :(得分:0)
上面提供的解决方案实际上是处理此方案的好方法。在实施之前,您可能还想考虑潜在的后退。客户端PC的IP可能会发生变化,因为您正在使用套接字。列表中添加的对象引用可能是故障状态。您可能想要考虑处理这个陷阱。