我希望在更新表时从数据库接收通知但是我需要一个后面的线程,它在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;
}
}
答案 0 :(得分:1)
您无法在asp.net页面上使用背景thread
。它适用于http
无状态协议,页面对象在发送响应后不可用。您只能针对一个请求发送一个响应。您可以使用jQuery ajax,asp.net ajax library timer control或web 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