如何在ASP.NET中通知的表单加载函数中添加后台线程?

时间:2014-02-21 10:26:15

标签: c# asp.net multithreading

我希望在更新表时从数据库接收通知但是我需要一个后面的线程,它在1个薄荷之后调用并检查数据库表并向我显示通知。我如何实现后台线程?我已经实现了一个线程但是当我在其中使用while(true)时,我的表单没有被加载继续处理。

代码:

protected void Page_Load(object sender, EventArgs e)
{
    t1 = new Thread(new ThreadStart(Function1));
    t1.IsBackground = true;
    t1.Start();
}

private void Function1()
{
    while (true)
    {
        Thread.Sleep(2000);
        count++;                
        Label1.Text = "Function" + count;
    }
}

3 个答案:

答案 0 :(得分:1)

您无法在asp.net页面上使用背景thread。它适用于http无状态协议,页面对象在发送响应后不可用。您只能针对一个请求发送一个响应。您可以使用jQuery ajaxasp.net ajax library timer controlweb sockets定期从服务器获取数据。

这个 post 解释了如何使用jQuery ajax从服务器获取数据。使用Web方法从服务器获取数据也非常好tutorial。本教程中的示例如下所示。

代码

public partial class _Default : Page 
{
  [WebMethod]
  public static string GetDate()
  {
    return DateTime.Now.ToString();
  }
}

<强>的Javascript

$(document).ready(function() {
  // Add the page method call as an onclick handler for the div.
  $("#Result").click(function() {
    $.ajax({
      type: "POST",
      url: "Default.aspx/GetDate",
      data: "{}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function(msg) {
        // Replace the div's content with the page method's return.
        $("#Result").text(msg.d);
      }
    });
  });
});

答案 1 :(得分:1)

您对服务器端代码和客户端代码之间的区别存在根本的误解。

例如,您的请求需要一个框架(如SignalR)将实时通知推送给客户。

更简单的方法是使用Javascript轮询您选择的页面..例如(显然是jQuery):

// I'm not a huge jQuery person so theres probably a jQuery way to do this
setInterval(function() { 
    $.get('/yourPage.aspx', function(response) {
        if (response.success) {
            alert(response.message);
        }
    });
}, 5000); // poll a page every 5 seconds.

然后/yourPage.aspx的C#页面可以检查数据库并返回一个Json对象,其中包含我上面提到的属性。

您需要了解客户端和服务器端之间的区别..以及它们如何在无状态协议(如HTTP)中进行交互。

答案 2 :(得分:0)

如果您使用的是4.5框架,则可以在ASP.NET中执行异步任务:

http://www.hanselman.com/blog/TheMagicOfUsingAsynchronousMethodsInASPNET45PlusAnImportantGotcha.aspx