我正在为我们的文档管理项目开发NSE。我差不多完成了它,但我遇到了问题,但我还是找不到解决方案。
首先,我将解释我的情景。我的项目中有两个应用程序,一个是命名空间扩展,另一个是托盘工作,它是一个简单的gui,用于通知,历史记录和分机。
两个应用程序都需要连接,我使用静态类和静态变量,但这两个应用程序使用不同的AppDomain,所以我有两个相同静态类的实例。这不是问题,因为我在它们之间建立了沟通并且它正常工作。
问题是;当我的两个应用程序运行,如果我从gui应用程序注销,NSE也运行注销方法。考虑NSE文件夹已打开,该文件夹中有项目,从gui app注销。之后,如果你回去NSEFolder windows想要刷新项目,原因我需要一个成功连接的连接。如果没有连接,它将打开登录屏幕。 Windows正在为所有项目进行异步调用。我想只打开一次登录屏幕。所以我使用了锁机制但是当代码来自form.ShowDialog()方法第一次时,锁机制让我们通过第二次调用。 Lock完美无缺,直到代码出现showdiolog方法。它只发生在第一次通话显示屏幕后,锁定只通过第二次通话。在第一次锁定操作完成之前,锁定不会通过第三次调用。所以它有效,但不是我想要的正确。
当第二个调用通过锁定并显示对话框时,首先显示对话框,我的程序会等待它。但登录后,它看起来没有任何变化,并保持所有呼叫的打开登录表单。你知道我应该使用什么,或者我的错误是什么?
我的代码就是这样;
private static object syncLock = new object();
private static Connection _con;
public static Connection Connection
{
get
{
if (_con == null && TryConnect)
{
lock (syncLock)
{
if (_con == null && TryConnect)
{
LoginForm form = new LoginForm();
form.BringToFront();
form.TopMost = true;
if (form.CheckAutoLogin() || form.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
_con = form.Connection;
string message = string.Format("Login#{0}#{1}#{2}", _con.Server, _con.UserID, Globals.Password);
DriveBACommon.Classes.PipeHelper.Instance.Send(message);
TryConnect = true;
}
else
{
TryConnect = false;
}
}
if (_con != null && !_con.Connected)
{
_con.Open();
}
return _con;
}
}
return _con;
}
internal set
{
_con = value;
}
}