Kom ihåg mig?
Home Menu

Menu


.NET köra Events som triggar en rutin

Ämnesverktyg Visningsalternativ
Oläst 2009-12-01, 17:21 #1
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
Standard .NET köra Events som triggar en rutin

Hej!

Jag håller på och utvecklas lite som programmerar och har börjat med att använda Events i .NET men får inte riktigt till det här. Jag ska ge ett exempel på vart det går fel.

Jag har en klass som heter StaticPage med en Event som heter Saved som körs varje gång StaticPage uppdateras mot databasen. Eventen är deklarerad som Static/Shared

Sen har jag en annan klass som heter CleanStaticPage som har en rutin som ser till att kontrollera så att StaticPage innehåller xhtml baserad kod, det körs in ett objekt för hela appen i Global.asax som Shared/Static.

Den har en metod som ser ut så här:

Public Class CleanStaticPage
Public CleanXHTML(UpdatedPage As StaticPage) Handels StaticPage.Saved
'DoSomeStuff
UpdatedPage.Save()
End If
End Class

Vips så har jag gjort StackOverflow eftersom den senare rutinen ser till att uppdatera objektet och då triggar det sig själv igen.
Jag försökte med att köra någon variant

RemoveHandler UpdatedPage,AdressOf CleanXHTML

och sen lägga till rutinen igen när uppdateringen var klar, men det funkar inte och jag får något warning-meddelande att koden är meningslös i sammanhanget.

Jag skulle vilja veta hur man får något sånt här och fungera så man kan ignorera metoden som triggade eventen att köras igen. En vacker dag ska det vara så att det här körs med Multi Threadning.

Antagligen har jag lite otur när jag tänker eftersom man säkert ska göra på ett smidigare sätt. Hela koden är bara påhitt för att illustrera exempel.
ledstrom är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-01, 19:38 #2
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Spontant så känns det lite fel med en massa statiska events, men.. Kan du publicera de delar av koden som är intressant? (Deklaration av events, anrop av events, addhandler osv)
Onkelborg är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-01, 20:23 #3
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
Yes, här kommer lite kod som visar principen. Jag undrar om det går och låsa funktionen på något sätt så att den inte kan köras flera gånger, men det känns som en fullösning och sätta in någon typ utav Shared Variabel som håller koll på det, sen har jag varit inne på om det går och lösa med Threading ocskå

Public Class ListnerHandler
Public Sub New()
AddHandler HTMLPage.Saved, AddressOf CleanUp
End Sub

Public Sub CleanUp(ByVal Obj As CustomizedEventArgs)
Obj.Sender.XHTML = "Fixed"
Obj.Sender.Save()
End Sub
End Class



Public Class HTMLPage
Public Shared Event Saved(ByVal EA As CustomizedEventArgs)
Protected Sub OnSaved()
RaiseEvent Saved(New CustomizedEventArgs(Me))
End Sub

Private _XHTML As String
Public Property XHTML() As String
Get
Return _XHTML
End Get
Set(ByVal value As String)
_XHTML = value
End Set
End Property


Public Sub Save()
''' Do the magic
OnSaved()
End Sub

End Class

Public Class CustomizedEventArgs
Inherits EventArgs

Public Sender As HTMLPage

Public Sub New(ByVal CurrentSender As HTMLPage)
Sender = CurrentSender
End Sub
End Class
ledstrom är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-01, 22:13 #4
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
ledstrom ledstrom är inte uppkopplad
Medlem
 
Reg.datum: Jan 2007
Inlägg: 84
Näe nu ger jag upp, jag får verkligen inte till det här, men jag antar att det kanske är lika dumt som att skriva som här nedanför. Men visar det sig ändå att det går och lösa så är jag tacksam för något förslag

Public Class Test
Sub New()
Dim T As New Test
End Sub
End Class
ledstrom är inte uppkopplad   Svara med citatSvara med citat
Oläst 2009-12-02, 19:04 #5
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Onkelborg Onkelborg är inte uppkopplad
Flitig postare
 
Reg.datum: Feb 2007
Inlägg: 382
Deklarera inte ditt event som shared/static. Gör istället så att man när man skapar din klass själv får haka på eventet med addhandler.

Pseudokod i C#:

bool ignoreEvent = false;
HtmlPage hp = new HtmlPage();
hp.Saved += new EventHandler(delegate(object sender, EventArgs e)
{
if(!ignoreEvent)
{
ignoreEvent = true;
//Gör någonting
}
});
Onkelborg är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 05:51.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017