parralel ASP.NET计时器控件

时间:2011-07-25 17:30:21

标签: asp.net timer

我有一个问题,我真的很感激一点帮助。

在我的.aspx上我有四个ASP.NET Timer控件,当他们每个Ticks时我都会异步调用不同的Web服务方法,它会返回一些照片。我在更新面板中有一个图像,并在我得到照片时更新它src。我正在使用jQuery lightBox插件来预览图像。

问题在于:我希望计时器同时工作(同时)。所以在页面加载,几秒后应该出现每个定时器的勾选(并行,同时更少)。两个计时器都有相同的时间间隔,所以它应该工作,但实际上我注意到第二个计时器只在第一个Web服务回调出现后才会打勾,第三个计时器在第二个Web服务回调出现后进行计时。所以这一切都是线性的,而不是平行的。

任何解决方案如何将其同时修改为Tick?

我的.aspx:

<center>
    <asp:Timer runat="server" ID="UpdateTimer1" OnTick="UpdateTimer1_Tick" />
    <asp:UpdatePanel runat="server" ID="TimedPanel2" UpdateMode="Conditional">
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="UpdateTimer1" EventName="Tick" />
        </Triggers>
        <ContentTemplate>
            <asp:Literal runat="server" ID="Ltr1" />
            <div id="div1" runat="server">
                <img alt="" id="img1" runat="server" style="width: 85%; height: 85%" />
            </div>
        </ContentTemplate>
    </asp:UpdatePanel>
</center>    

我的一个计时器在.aspx.cs中,其余的Timers是相似的 - 调用不同的webservice,但有相同的事件,updateTimer_Ticks等:

protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostBack)
      {
         UpdateTimer1.Interval = 3000;
      {
}

protected void UpdateTimer1_Tick(object sender, EventArgs e)
{ 
   AsynchGetPhoto();       
}


public void AsynchGetPhoto()
{
    WS.Service Service = new WS.Service();

    Service.getPhotoCompleted += new Service.getPhotoCompletedEventHandler(PhotoCompleted);
    Service.getPhotoAsync();
}


public void PhotoCompleted(object sender, WS.Service.getPhotoCompletedEventArgs args)
{
    img1.Attributes.Add("src", "data:image/jpg;base64," + args.Result);
}

1 个答案:

答案 0 :(得分:0)

我能告诉你的关于你的问题的是我对这个计时器如何工作的理解,并在幕后发生,你可以在你的代码中进行更多调查。

当计时器勾选到您的函数的异步请求时,每个计时器都会触发它自己的请求,并且浏览器应该并行处理所有请求,所以我建议你打开firebug,看看你的计时器请求,看看它们是否是彼此依赖,每个请求都是在另一个请求之后处理,或者只是浏览器的呈现机制导致定时器延迟。