• 1000 отлично, но время между 25-30 сек c пропускается.
Вот мой код
в файле .aspx
<asp:UpdatePanel ID="upTimerAuction" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div class="squareBOX">
<asp:Timer ID="tm1000ms" runat="server" Interval="1000" OnTick="tm1000ms_Tick"></asp:Timer>
<asp:Label ID="lblTimer" runat="server" EnableViewState="true"></asp:Label>
</div>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="tm1000ms" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>
в файле .aspx.cs
в page_load
if (!Page.IsPostBack)
{
if (Application["AuctionTimer"] == null)
{
Application.Lock();
Application["AuctionTimer"] = new CountDownTimer(TimeSpan.Parse("00:00:30"));
Application.UnLock();
(Application["AuctionTimer"] as CountDownTimer).Start();
}
}
}
В методе таймера
protected void tm1000ms_Tick(object sender, EventArgs e)
{
if (Application["AuctionTimer"] != null)
{
if (!(Application["AuctionTimer"] as CountDownTimer).TimeLeft.ToString().Equals("00:00:00"))
{
string rawTime = "";
string AuctionTime = "";
rawTime = (Application["AuctionTimer"] as CountDownTimer).TimeLeft.ToString();
AuctionTime = rawTime.Substring(rawTime.IndexOf(":") + 1);
int timerSec = Convert.ToInt32(AuctionTime.Substring(AuctionTime.IndexOf(":") + 1));
lblTimer.ForeColor = Color.Black;
lblTimer.Text = AuctionTime + "sec";
}
else
{
if (Session["AdminID"] != null)
{
//Database related classes are called to sold the item
// as it is an Auction Website (Live Auction)
}
startNewPlayerLoading();
}
}
}
метод startNewPlayerLoading
private void startNewPlayerLoading()
{
tm1000ms.Enabled = false; // disabling the timer of countdown
divitemCard.Visible = false; // disabling the item picture div
divnewitemCard.Visible = true; // enabling the New Item Loading DIV
upPlayerCard.Update(); // Updating update panel as they both are in same Update Panel
timerblock.Visible = false; // disabling old countdown timer
freshTimerBlock.Visible = true; // enabling new Loading countdown timer
upFreshAuction.Update(); // Updating update panel as they both are in same Update Panel
tmPlayerCard.Enabled = true; // enabling the new Loading timer of countdown
RestartFreshStopwatch(); // starting the Loading countdown Timer
}
и класс таймера обратного отсчета
public class CountDownTimer
{
public TimeSpan TimeLeft;
System.Threading.Thread thread;
public CountDownTimer() { }
public CountDownTimer(TimeSpan original)
{
this.TimeLeft = original;
}
public void Start()
{
thread = new System.Threading.Thread(() =>
{
while (true)
{
if (!TimeLeft.Equals(TimeSpan.Parse("00:00:00")))
{
System.Threading.Thread.Sleep(1000);
TimeLeft = TimeLeft.Subtract(TimeSpan.Parse("00:00:01"));
}
}
});
this.thread.Start();
}
public void Stop()
{
TimeLeft = TimeLeft.Add(TimeSpan.Parse("00:00:00"));
if (this.thread != null)
this.thread.Abort();
}
}
Работает также и при обновлении страницы sh таймер не запускается сначала, а иногда задерживается. Кто-нибудь лучше знает, как запустить таймер на стороне сервера, а также не перезапускается при refre sh ..
Спасибо