您好我计划在窗口应用程序中实现类似会话的功能,但目的不是为了保存使用信息。主要目的是在会话到期后注销或至少提示登录/密码。我可以在网上找不到有关超时功能的信息。如果有人可以指点我一些资源或与我们分享他的经验,我将非常感激。感谢您阅读本文 PS:我正在使用C#.NET 2.0和visual studio 2005 merci。
答案 0 :(得分:3)
您最简单的解决方案是使用Timer
并将Duration
属性设置为您在超时中所需的毫秒数。无论何时遇到活动,您都可以通过调用Stop
然后立即呼叫Start
来重置计时器。在Timer
的{{1}}事件中放置您想要的任何代码(假设这是一个Tick
),您将全部设置好。
答案 1 :(得分:2)
我已经想出了一些关于那个会话的实现,我想特别为那些有相同问题的人分享。这不完美,我会像你这样聪明的人给我一些指导,让它可以接受足够。 首先,我创建了一个类usersession
using System.Timers;
public class usersession
{
private static bool sessionalive;
private static Timer usertimer;
public static bool SessionAlive
{
get { return sessionalive; }
set { sessionalive = value; }
}
public static void BeginTimer()
{
try
{
SessionAlive = true;
//usertimer.Start();
usertimer = new Timer(int.Parse(ConfigurationManager.AppSettings["sessiontime"].ToString()));
usertimer.Enabled = true;
usertimer.AutoReset = false;
usertimer.Elapsed += new ElapsedEventHandler(DisposeSession);
}
catch (Exception ex)
{
return;
}
}
private static void DisposeSession(object source, ElapsedEventArgs e)
{
try
{
SessionAlive = false;
}
catch (System.Exception ex)
{
return;
}
}
public static void ResetTimer()
{
try
{
SessionAlive = true;
usertimer.Stop();
usertimer.Start();
}
catch (Exception ex)
{
return;
}
}
}
这是一个mdi应用程序所以在主窗体中我有函数startsession
public frMain()
{
InitializeComponent();
StartSession();
//SessionChecker();
}
public void StartSession()
{
try
{
usersession.BeginTimer();
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
因此,每当用户点击某些内容时,我们会在此开关案例片段中检查usersession.SessioAlive属性
case "transfer":
if (!usersession.SessionAlive)
{
new LoginForm().ShowDialog();
}
MessageBox.Show("cash back transfert page");
break;
在loginForm里面登录是正确的我们称之为usersession.ResetTimer()
this.DialogResult = DialogResult.OK;
usersession.ResetTimer();
this.Close();
现在我真的希望检查在后台运行,这是我需要你的建议。我使用forms.timer创建一个小工作,但因为forms.timer没有autoreset它做一个无限循环。这是it.it是主要形式
private void SessionChecker()
{
try
{
check = new Timer();
check.Enabled = true;
check.Interval = 1000;
check.Tick += new EventHandler(check_Tick);
}
catch (Exception)
{
throw;
}
}
void check_Tick(object sender, EventArgs e)
{
try
{
if (!usersession.SessionAlive)
{
new LoginForm().ShowDialog();
check.Stop();
}
}
catch (System.Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
所以你认为我应该这样做,以便它不需要用户在会话到期时提示输入凭据之前的操作。 感谢您阅读这些长篇大论。 :)