2010-11-22 29 views
0

Le code suivant -scheduler.vb- simule un service Windows utilisant ASP.NET pour exécuter des travaux planifiés. Plus d'informations ici: http://beckelman.net/post/2008/09/20/Simulate-a-Windows-Service-Using-ASPNET-to-Run-Scheduled-Jobs.aspxproblème dans le code du planificateur

Howerver quand j'essaye d'exécuter la classe dans mon global.asax j'obtiens l'erreur suivante (accentuée sur RunScheduledTasks): "L'expression ne produit pas une valeur", pourquoi ?? Merci.

global.asax

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) 
    Scheduler.Run("test", 1, RunScheduledTasks) 
End Sub 


Public Sub RunScheduledTasks() 
'Do stuff here 
end Sub 

scheduler.vb

Public Class Scheduler 
Private Class CacheItem 
    Public Name As String 
    Public Callback As Callback 
    Public Cache As Cache 
    Public LastRun As DateTime 
End Class 

Public Delegate Sub Callback() 

Private Shared _numberOfMinutes As Integer = 1 

Public Shared Sub Run(ByVal name As String, ByVal minutes As Integer, ByVal callbackMethod As Callback) 
    _numberOfMinutes = minutes 

    Dim cache As New CacheItem() 
    cache.Name = name 
    cache.Callback = callbackMethod 
    cache.Cache = HttpRuntime.Cache 
    cache.LastRun = DateTime.Now 
    AddCacheObject(cache) 
End Sub 

Private Shared Sub AddCacheObject(ByVal cache_1 As CacheItem) 
    If cache_1.Cache(cache_1.Name) Is Nothing Then 
     cache_1.Cache.Add(cache_1.Name, cache_1, Nothing, DateTime.Now.AddMinutes(_numberOfMinutes), Cache.NoSlidingExpiration, CacheItemPriority.NotRemovable, _ 
     AddressOf CacheCallback) 
    End If 
End Sub 

Private Shared Sub CacheCallback(ByVal key As String, ByVal value As Object, ByVal reason As CacheItemRemovedReason) 
    Dim obj_cache As CacheItem = DirectCast(value, CacheItem) 
    If obj_cache.LastRun < DateTime.Now Then 
     If obj_cache.Callback IsNot Nothing Then 
      obj_cache.Callback.Invoke() 
     End If 
     obj_cache.LastRun = DateTime.Now 
    End If 
    AddCacheObject(obj_cache) 
End Sub 
End Class 
+0

Tout commentaire sera apprécié !!!!!!!!! – netNewbi3

+0

Vous dites qu'il est en surbrillance sur 'RunScheduledTasks'. Qu'est-ce qui est exactement mis en évidence? 'Public Sub RunScheduledTasks()'? – Justin

+0

Si l'erreur est dans RunScheduledTasks, pourquoi nous avez-vous donné le code pour tout sauf RunScheduledTasks? – jason

Répondre

0

Axé sur le lien que vous avez fourni, il semble que cela peut être une conversion incorrecte de C# à VB. Le code C# crée automatiquement un délégué Callback avec RunScheduledTasks comme cible pour passer à Scheduler.Run.

Je soupçonne que votre code VB.Net est à la recherche sur cette ligne:

Scheduler.Run("test", 1, RunScheduledTasks) 

et attend RunScheduledTasks d'être une fonction renvoyant un délégué Callback. Malheureusement, je ne connais pas VB.Net, donc je devine ici. Peut-être que cela fonctionnerait si vous avez ajouté l'opérateur AddressOf (link), comme suit:

Scheduler.Run("test", 1, AddressOf RunScheduledTasks) 
+0

Merci beaucoup. L'erreur est partie. Désolé pour la question de base, mais je ne connaissais pas les délégués. Merci encore. – netNewbi3