簡體   English   中英

消息框不止一次彈出

[英]Message Box Pops up more than once

我有以下代碼,timerStart方法將每秒調用一些函數,問題是當checkSigning方法中的條件為true時,彈出窗口出現多次。.我如何解決此問題? 有人可以幫我嗎:<

  public void timerStart()
    {
        DispatcherTimer updaterTimer = new DispatcherTimer();
        updaterTimer.Tick += new EventHandler(updaterTimer_Tick);
        updaterTimer.Interval = new TimeSpan(0, 0, 1);
        updaterTimer.Start();

    }

    private void updaterTimer_Tick(object sender, EventArgs e)
    {
        Time.Content = "Time : " + DateTime.Now.ToLongTimeString();
        exist = saved_settings();
        if (exist)
        {
            settingForToday();
            checkSigningAvailable();
            setSigning(signingAvailable = getSigning());
        }
        else
        {
            ongoing.Content = "Event : No Event";
            sign_in.Content = "Sign-in Time : ";
            sign_out.Content = "Sign-out Time : ";
        }

    }

    public void checkSigningAvailable()
    {
        if (dt_signing_in.CompareTo(DateTime.Now) < 0)
        {
            if ((!InisOver && signing.Equals("in")) || (!InisOver && signing.Equals("in_out") && !OutisOver))
            {
                disableSigningIn(OutisOver.ToString(),this.event_id);
            }
        }

        if (dt_signing_out.CompareTo(DateTime.Now) < 0)
        {
            if ((!OutisOver && signing.Equals("out")) || (!OutisOver && signing.Equals("in_out") && InisOver))
            {
                disableSigningOut(InisOver.ToString(),this.event_id);

            }
        }
    }


    public void disableSigningOut(string In,string event_id)
    {
            MessageBox.Show("Signing out is over!", "No more signing out!", MessageBoxButton.OK, MessageBoxImage.Information);
            connection.Open();
            string sign = In + ",True";
            string query = "update data_storage set data_details = '" + sign + "' where data_name = 'Signing';";
            NpgsqlCommand command = new NpgsqlCommand(query, connection);
            NpgsqlDataReader dr = command.ExecuteReader();
            dr.Close();
            connection.Close();
            sign_out.Content = "Sign-out Time : Over";
            string query2 = concatQuery(getIDnumberAttendance(event_id));
            updateAbsences(query2);
    }

您可以在執行刻度線時停止計時器,然后在最后重新啟動計時器。 唯一的缺點是時間將以您完成updaterTimer_Tick執行的時間為准-但您也可以將其視為一種好處。

private void updaterTimer_Tick(object sender, EventArgs e)
{
    updaterTimer.Stop();
    Time.Content = "Time : " + DateTime.Now.ToLongTimeString();
    exist = saved_settings();
    if (exist)
    {
        settingForToday();
        checkSigningAvailable();
        setSigning(signingAvailable = getSigning());
    }
    else
    {
        ongoing.Content = "Event : No Event";
        sign_in.Content = "Sign-in Time : ";
        sign_out.Content = "Sign-out Time : ";
    }
    updaterTimer.Start();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM