1

重複の可能性:
これを修正する方法を知っている人はいますか? Web ページに戻ってもタイマーが 30 分にリセットされません

これが私のコードです。誰かが私を助けてくれることを願っています、ありがとう

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Timer1.Enabled = true;
        if (Session["CountdownTimer"] == null )
        {
            Session["CountdownTimer"] = new CountDownTimer(TimeSpan.Parse("00:30:00"));
            (Session["CountdownTimer"] as CountDownTimer).Start();
        }
    }
}

protected void Timer1_Tick(object sender, EventArgs e)
{
    if (Session["CountdownTimer"] != null)
    {
        if (Label1.Text != "00:00:00")
        {
            Label1.Text = (Session["CountdownTimer"] as CountDownTimer).TimeLeft.ToString();
            Session["time"] = Label1.Text;
        }
        else if((Session["CountdownTimer"] as CountDownTimer).TimeLeft.Seconds <= 0)
        {
            (Session["CountdownTimer"] as CountDownTimer).Stop();
            Timer1.Enabled = false;
            Response.Redirect("timer.aspx");
        }
    }
}

public class CountDownTimer
{
    public TimeSpan TimeLeft;
    System.Threading.Thread thread;
    public CountDownTimer(TimeSpan original)
    {
        this.TimeLeft = original;
    }
    public void Start()
    {
        // Start a background thread to count down time
        thread = new System.Threading.Thread(() =>
        {
            while (true)
            {
                System.Threading.Thread.Sleep(1000);
                TimeLeft = TimeLeft.Subtract(TimeSpan.Parse("00:00:01"));

            }
        });
        thread.Start();
    }

    public void Stop()
    {
        // Start a background thread to count down time
        thread = new System.Threading.Thread(() =>
        {
            while (true)
            {
                System.Threading.Thread.Sleep(1000);
                TimeLeft = (TimeSpan.Parse("00:00:00"));

            }
        });
        thread.Abort();
    }
}
4

2 に答える 2

3

私はあなたが何を達成しようとしているのか正確にはわからないと思います。しかし、いくつかの観察はあなたがあなたが必要とするものを手に入れるのを助けるかもしれませんか?

  • Timer1_Tick呼び出されることはありません。
  • CountDownTimer.Startwhile(true)決して終了しないループがあります。
  • CountDownTimer.Start睡眠後は何も面白いことはしません
  • CountDownTimer.Stopまた、決して終了しないwhile(true)`ループがあります。
  • 何をしTimer1.Enableますか?
  • ここで何をしようとしていますか?それは完全に不明です。
于 2012-10-05T17:44:10.873 に答える
1

本当に答えません...しかし、コメントには合いません...

ほとんどの場合、任意の種類のタイマーを実装するために、既存の時間 (DateTime.Now) に依存し、タイマーの開始/停止を知ることができます。

デザインを考え直してみるのもいいかもしれません。次のことは、奇妙な/予期しない動作につながります。

  • シリアライズ不可能なオブジェクトをセッション状態にする
  • メモリ内のセッション状態が永続的であることに依存する (つまり、アプリケーションの再構築、サーバーの再起動後も存続する)
  • ASP.Net アプリケーションでのスレッドの使用
  • Thread.Abort の使用
  • Thread.Sleep の使用
于 2012-10-05T18:48:31.797 に答える