C# 在C中使用FileSystemWatcher时,HttpContext.Current为null#

C# 在C中使用FileSystemWatcher时,HttpContext.Current为null#,c#,filesystemwatcher,C#,Filesystemwatcher,我在ASP.NET web应用程序中使用表单身份验证,并在特定表单中使用FileSystemWatcher 它有两个事件watcher\u Changed和watcher\u Created。事件被正确调用。触发事件后,HttpContext.Current将变为null 我不明白FileSystemWatcher是否正在清除会话。有人能帮我吗?代码如下 void watcher_Created(object sender, FileSystemEventArgs e) { watche

我在ASP.NET web应用程序中使用表单身份验证,并在特定表单中使用FileSystemWatcher

它有两个事件
watcher\u Changed
watcher\u Created
。事件被正确调用。触发事件后,
HttpContext.Current
将变为null

我不明白
FileSystemWatcher
是否正在清除会话。有人能帮我吗?代码如下

void watcher_Created(object sender, FileSystemEventArgs e)
{
    watcher_Event(sender, e);
}

private void watcher_Event(object sender, FileSystemEventArgs e)
{
    try
    {
        if (getUserName() != null)
        {
            //Some Code
        }
    }
}

public string getUserName()
{
    FormsIdentity useridentity = (FormsIdentity)HttpContext.Current.User.Identity;   //Exception is thrown here. ("Object reference not set to instance of an object")
    FormsAuthenticationTicket userticket = useridentity.Ticket;
    string username = userticket.Name;
    return username;
}

谢谢。

FileSystemWatcher.Changed事件本质上是异步的。这意味着它可能在HTTP请求得到服务并且会话关闭后引发。如果要将
FileSystemWatcher
的事件与导致其创建的用户关联,则需要明确地维护该事件–例如,通过将每个
FileSystemWatcher
映射到用户名的字典。

在何处调用此代码?在某些上下文中,您只有一个HttpContext用户,但不是在所有上下文中都有。或者您根本不应该使用FileSystemWatcher。请考虑其他方法。HttpContext是线程本地的,所以您不应该期望它在每个线程中都不是空的。@LexLi您可以建议其他方法吗。非常感谢。您可以发布更多关于此表单功能的详细信息,以及您在一开始就决定使用FileSystemWatcher的原因。然后每个人都可以帮助塑造它。请考虑POST这是一个新的设计问题,因为这个问题,你已经从@道格拉斯得到了正确的答案。LexLi非常感谢你的回复。表单的功能如下所示。1.用户登录到应用程序。2.应用程序应不断扫描文件夹以查找添加的任何新文件(XML)。从数据库中读取文件夹的路径。3.在文件夹中创建新文件时,应用程序将从XML文件中读取相关数据,并在表单中显示有关该文件的信息。在搜索相关控件以实现此功能后,我选择了FileSystemWatcher。我不太确定它在网络应用程序中有多有效。谢谢你的回复。您能否更详细地解释如何将FileSystemwatcher映射到用户名?