Я придумаю некоторую реализацию этой сессии, которую я хотел бы поделиться, особенно для тех, у кого такая же проблема. Она не идеальна, и мне бы хотелось, чтобы такие умные люди, как вы, давали мне советы, чтобы сделать ее приемлемой. довольно.
прежде всего я создал класс 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 для создания небольшой работы, но так как с Form.timer нет автоматического сброса, он выполняет бесконечный цикл. 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());
}
}
так что, как вы думаете, я должен сделать, чтобы он не требовал от пользователя каких-либо действий, прежде чем он запросит учетные данные после истечения сеанса.
спасибо за чтение этого длинного материала. :)