如何清除计时器已用的会话变量并重定向到另一个视图?

时间:2019-06-04 16:46:13

标签: c# asp.net-mvc timer session-variables

我正在使用System.Timers.Timer类。逻辑是在5分钟后通过Elapsed触发计时器。在间隔过去之后(例如5分钟后),我想清除要处理的会话变量,然后重定向到另一个视图。

我知道主线程和经过时间间隔的线程是两个不同的线程,因此,我无法访问会话。但是我受此时间间隔后清除会话并重定向到另一个视图的要求的约束。

我还考虑过使用JavaScript超时功能,但我怀疑这不会帮到我,因为我的应用程序调用了另一个API(支付网关API),并且该URL将被重定向到其URL页面。因此,检查DOM时,我只会看到他们的html页面内容,而当我从他们的服务器将其发布到我的url中时,我的内容就会随之出现。

我的代码是:

    public async Task<ActionResult> Index()
    { 
        TimerSessionForIssueTicket();
        return View();
    }

    public void TimerSessionForIssueTicket()
    {
        FlightBooking FlightBooking = new FlightBooking(); 

        if (Session["Timer"] == null)
            Session["Timer"] = new Timer();

        ((Timer)Session["Timer"]).Interval = FlightBooking.GetTicketBookingIssueTime((string)ConfigurationManager.AppSettings["TicketBookingWindowTotal"]);
        ((Timer)Session["Timer"]).Elapsed += OnTimedEvent;
        ((Timer)Session["Timer"]).AutoReset = false;
        ((Timer)Session["Timer"]).Enabled = true;
    }


    private void OnTimedEvent(object source, ElapsedEventArgs e)
    {            
        CancelBooking();
    }

    public ActionResult CancelBooking()
    {
        if (Session["Inbound"] != null) { Session.Remove("Inbound"); }
        return View("Index", home);
    }

经过计时器后,会话将抛出system.nullreferenceexception。 我删除了删除会话的代码以检查页面重定向,但是没有错误出现,页面没有重定向。

如何解决此问题?还是有其他技术可以完成此任务?请建议

1 个答案:

答案 0 :(得分:0)

我的代码将是这样的。页面重定向到google.com后,Timer将不会触发。 从javascript触发计时器有效吗?

@android:color/transparent