【发布时间】:2015-04-09 07:25:39
【问题描述】:
您好,我有一个静态类,其中包含包含数据库数据的静态变量。我希望这些变量每 5 秒更新一次,所以我在同一个类中创建了一个线程,它将执行一个从数据库中获取数据并更新变量的函数。但我得到一个nullReferenceException 指向我声明初始化连接的行。
这是我的代码:
public static void Initialize()
{
if (!isInitialized)
{
isInitialized = true;
Thread t = new Thread( new ThreadStart(SetProperties));
t.Start();
}
}
public static void SetProperties()
{
//The next line is where the NullReferenceException is pointing to
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + System.Web.HttpContext.Current.Server.MapPath("cms.accdb") + "';");
using (conn)
{ ....
有什么帮助吗?谢谢
【问题讨论】:
-
请求线程之外没有
HttpContext.Current。说真的,你在做什么是愚蠢的。您需要重新考虑设计,ASP.NET 并不是真正适合做这种事情的环境。 -
@Luaan 嗨。感谢您的回复。但是您能否详细说明“请求线程之外没有 HttpContext.Current”?为什么你认为我在做的事情很傻?请指导我。我正在自学 ASP.net。
-
HttpContext.Current是上下文相关的。它只会在请求线程上有一个值,并且您通过启动一个新线程来保留它(也就是说,您的Initialize方法在请求线程上运行,但SetProperties没有)。这会导致您的NullReferenceException,因为您正在尝试访问null值的属性。缓存是计算中最难的事情之一,因此在尝试这方面的任何严肃事情之前,您可能需要了解更多信息。多线程是另一件最难的事情,在这里你作为初学者正在做这两项工作。坏主意:)
标签: c# asp.net multithreading