前情提要:最近公司同事在做WPF的多个客户端的项目,客户端之间的通信是通过服务器转发实现的。
出现的问题:1.客户端A点击按钮a,A显示界面P正常,客户端B显示界面P正常;但是界面P跳转到界面P1后会出现很多界面;
2.修改之后,又报错:关闭 Window之后,无法设置 Visibility,也无法调用 Show、ShowDialogor等等;
当时看了代码第一反应是实例有问题,close()方法不会销毁你的实例,导致每次点击都会增加一个实例。看到这里自然而然就想到了单例模式。虽然简单,但是实用啊,哈哈哈!
但是我是第一次接触C#,很多东西也不是很清楚,有不对的,欢迎大家指正;
1.界面P、P1都需要写一个单例的接口:
//P
static P p_instance = null;
static public P instance()
{
if (p_instance == null)
p_instance = new P();
return p_instance;
}
//P1
static P1 p1_instance = null;
static public P1 instance()
{
if (p1_instance == null)
p1_instance = new P1();
return p1_instance;
}
2.界面P中的事件:
public void ToP1()
{
Dispatcher.BeginInvoke(new Action(delegate
{
this.Close(); //关闭界面P
if(p_instance != null)
p_instance.Close(); //关闭多余的P
p_instance = null; //销毁P,保证下次打开是一个新的P
P1.instance().Show(); //打开界面P1
}));
}
3.界面P1中的事件:
public void ToP()
{
Dispatcher.BeginInvoke(new Action(delegate
{
this.Close(); //关闭界面P1
if(p1_instance != null)
p1_instance.Close();
p1_instance = null;
P.instance().Show(); //打开界面P
}));
}
客户端A和客户端B的代码是完全一样的,这样操作就好了,没有多余的界面,也不会报错。
如果哪里写的有问题,欢迎大家指出来!