Hey mensen,
Ik ben wat aan het expirimenteren met een singelton en loop hierbij tegen een probleem aan.
Het betreft een singelton met daarin een thread, en het probleem zit em in het disposen.
Doordat de thread nu nog doorloopt, wordt er nooit een dispose uitgevoerd. Wat zoveel inhoud dat een applicatie die deze singleton gebruikt, nooit zal afsluiten.
Ik heb al lopen spelen met IDisposable's en finalizers ed. En het is een vaker gezien probleem, maar de oplossingen die ik tegenkom helpen me niet doordat die thread blijft doorlopen.
Om het nu eerst maar op te lossen, doe ik tijdens het disposen van mijn form een aanroep naar de singleton functie DisposeInstance. Maar echt fraai vind ik het niet. Is hier ook een andere oplossing voor?
Tijdens het afsluiten van mij form heb ik dan de volgende code:
Ik ben wat aan het expirimenteren met een singelton en loop hierbij tegen een probleem aan.
Het betreft een singelton met daarin een thread, en het probleem zit em in het disposen.
Doordat de thread nu nog doorloopt, wordt er nooit een dispose uitgevoerd. Wat zoveel inhoud dat een applicatie die deze singleton gebruikt, nooit zal afsluiten.
Ik heb al lopen spelen met IDisposable's en finalizers ed. En het is een vaker gezien probleem, maar de oplossingen die ik tegenkom helpen me niet doordat die thread blijft doorlopen.
Om het nu eerst maar op te lossen, doe ik tijdens het disposen van mijn form een aanroep naar de singleton functie DisposeInstance. Maar echt fraai vind ik het niet. Is hier ook een andere oplossing voor?
Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
| Public Class Singleton 'The one and only instance of this object. Private Shared instance As Singleton Private RunThread As Boolean = True Protected Sub New(ByVal FileName As String) WorkerThread.Start() End Sub Public Sub DisposeInstance() RunThread = False End Sub Public Shared Function GetInstance(ByVal FileName As String) As Singleton ' initialize if not already done If instance Is Nothing Then instance = New Singleton(FileName) End If ' return the initialized instance of the Singleton Class Return instance End Function 'Instance 'The magic happens here. Public Sub MainLoop() While RunThread End While End Sub End Class |
Tijdens het afsluiten van mij form heb ik dan de volgende code:
Visual Basic .NET:
1
2
| Dim MyStupidSingleton As Singleton = Singleton.GetInstance(Log_Filename) MyStupidSingleton.DisposeInstance() |
[ Voor 6% gewijzigd door Armageddon_2k op 23-02-2012 16:03 ]