主要是我想在A机器更改了数据库的信息,B机器用来显示的。。我不知道如何实现。。求具体方法。。希望不要只发个socket,或者TIME。。触发器上来。。
请问UDP SOCKET。。需要用到SQL的储存过程来触发吗?提交的网络广播指令怎样存储?
追答UDP是在客户端自己定义事件触发的,和存储过程没关系的。
比如你点了一个按钮,修改了数据库数据,修改完了之后,用UdpClinet对象网局域网里的某个端口广播一个指令,如"update".
其他机器的客户端程序启动的时候需要监听一下某端口,这样当A机器广播了一个指令之后,各个客户端就都会收到update这个指令,然后都去查询一下数据库更新一下显示结果就行了。
代码我现在没有,晚上回去我可以发上来给你看看。现在你可以去研究一下c# 的udpclient类
OK..非常感谢。。我下午都在看udpclient类。。觉得比较适合。。我等你哟。。
哈哈。。我测试的时候。发送指令测试无问题。。但是接收的界面死机。。而且不能够刷新。。
不好意思啊,昨晚回去一忙把这事给忘了...
接收端监控某个端口的代码是个死循环,必须要放在后台里,定义一个线程,线程里启动这个死循环,然后把线程放到后台里,好像是isbackground的属性设置,否则程序肯定要挂了。
此外在循环体里一旦接收到数据,就调用一个委托事件,这样才能对界面上的控件进行操作。否则会报错的,.net 2005以上的版本线程内是无法对外部控件直接操作的,只能用委托的方法。
private Thread messageAccectThread;
private void Form1_Load(object sender, EventArgs e)
{
BeginMessageAcceptor();
}
哈哈。。解决了。。非常感谢。。
呵呵。您的意思是否跟Timer差不多?B机器不知道A什么时候提交过数据,所以它不知道什么时候去后台刷新数据哟。。还不如手动刷新减轻数据库的负担。。对吧?
追答你的程序数据库访问量有多大? 没什么负担就这么来吧,还简单。
backgroundWorker_DoWork
while (true)
{
System.Threading.Thread.Sleep(5000);
//do
}
实在抱歉。。刚刚才从PHP转过来做C#有点菜。。我的程序是B机器打开程序之后就一直开着。。一直在监听数据库的变化从而更新显示的内容的。。。 backgroundWorker_DoWork 是在LOAD窗口的时候就开始循环后台刷新数据吗,当遇到变化才刷新界面,这样程序一直在后台操作会不会不好呢?如果要实现这种即时更新的效果,如果在A机器提交数据的时候向B机器发送触发数据是不是很麻烦?
追答那样是有socket的吧。很麻烦。应该你的B机器是客户单机,现在的机器性能,不要在乎这个后台程序。实际上咱们程序界面的时钟不也是后台1秒刷新一次么。没什么的。而且,后台丢出去的线程你也不用考虑别的比如稳定和性能什么的,这个微软也把类做好了。