使用ASP.NET模拟Windows服务

时间:2010-03-13 22:20:54

标签: asp.net vb.net web-services

我有一个小型网络应用程序,可以生成PDF文件作为报告。我试图在生成它们10秒后删除生成的PDF文件。我想要做的是每隔10秒读取一个包含PDF文件的文件夹,并删除该文件夹中的所有PDF文件。

我读了这个post of Easy Background Tasks in ASP.NET。以下代码是VB版本。

    Protected Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
    AddTask("DoStuff", 10)
End Sub

Private Sub AddTask(ByVal name As String, ByVal seconds As Integer)
    OnCacheRemove = New CacheItemRemovedCallback(CacheItemRemoved)
    HttpRuntime.Cache.Insert(name, seconds, Nothing, DateTime.Now.AddSeconds(seconds), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, _
     OnCacheRemove)
End Sub

Public Sub CacheItemRemoved(ByVal k As String, ByVal v As Object, ByVal r As CacheItemRemovedReason)
    ' do stuff here if it matches our taskname, like WebRequest

    DeletePDFilesInFoler()

    ' re-add our task so it recurs
AddTask(k, Convert.ToInt32(v))

End Sub

但是我收到了这个错误

  

代表   'System.Web.Caching.CacheItemRemovedCallback'   需要'AddressOf'表达式或   lambda表达式作为唯一的参数   它的构造函数。

如果此代码有效,我应该把它放在哪里。是的,现在我把它放在母版页中。如何解决这个错误?

谢谢

2 个答案:

答案 0 :(得分:1)

错误在错误消息中,您遗漏了AddressOf。试试这个:

OnCacheRemove = New CacheItemRemovedCallback(AddressOf CacheItemRemoved)

答案 1 :(得分:1)

为什么不在每次生成PDF时查找旧PDF并删除它们,而不是按计划删除它们?

的伪代码:

/* Clean up old PDFs */
If Not StaticCleaningUpPDFsNow Then
   // No other reports generating simultaneously and trying to delete old PDFs
   StaticCleaningUpPDFsNow = True 
   For each f in (reportfolder\*.pdf)
      If f.DateCreated.AddSeconds(10) < Now Then f.Delete
   Next
   StaticCleaningUpPDFsNow = False
End If
/* Create PDF for the current report */
...

在文件夹中查找文件并删除一些文件的开销非常小,按需执行此操作可以更好地利用资源,而不会遇到缓存过期(以及可能导致的边缘情况)的问题。 / p>