Public Module ItemCache Private cacheTable As Hashtable = New Hashtable Public Function GetItem(ByVal filename As String) As Item SyncLock GetType(ItemCache) If cacheTable.ContainsKey(filename.ToLower()) Then Dim target As Item = CType((CType(cacheTable(filename.ToLower()), WeakReference).Target), Item) If Not target Is Nothing Then Return target End If System.Diagnostics.Trace.WriteLine("すで既に破棄されていることを検出しました。再読込を行います。") End If Dim item As Item = New Item(filename) cacheTable(filename.ToLower()) = New WeakReference(item) Return item End SyncLock End Function End Module