我有100 +一類 -公共靜態方法和我想限制每次一個靜態呼叫,是否有任何與幾行代碼實現這個訣竅? 像一些類屬性來實現這一點?C#限制在一個類中的每個時間100+靜態方法(解決)一個靜態調用
像這樣:
public class Test
{
public static void A() { }
public static void B() { }
public static void C() { }
public static void D() { }
}
只有一個靜態方法調用是在同一時間訪問。當方法B正在調用時,必須阻止對其他方法的調用,直到方法B返回;
對不起,我似乎有一些誤導性的標題。我的真正目的是找到一種減少編碼的方法,以達到與通過向每個功能添加鎖定統計的結果相同的結果。無論如何,我解決了這個問題,最後加入了鎖 statment給每個函數,但是使用下面的marco爲我做了重複的工作。
''
'' edit from Code outlining sample.
''
Sub LoopFunction()
Dim i As Integer
Dim fileCM As FileCodeModel
Dim elts As EnvDTE.CodeElements
Dim elt As EnvDTE.CodeElement
fileCM = DTE.ActiveDocument.ProjectItem.FileCodeModel
elts = fileCM.CodeElements
For i = 1 To elts.Count
elt = elts.Item(i)
EditFunction(elt)
Next
End Sub
Sub EditFunction(ByVal elt As EnvDTE.CodeElement)
If (elt.Kind = EnvDTE.vsCMElement.vsCMElementNamespace) Then
Dim i As Integer
Dim mems As EnvDTE.CodeElements
mems = elt.Members
For i = 1 To mems.Count
EditFunction(mems.Item(i))
Next
ElseIf (elt.Kind = vsCMElement.vsCMElementClass) Then
Dim i As Integer
Dim mems As EnvDTE.CodeElements
mems = elt.Members
For i = 1 To mems.Count
EditFunction(mems.Item(i))
Next
ElseIf (elt.Kind = vsCMElement.vsCMElementFunction) Then
Dim epStart As EnvDTE.EditPoint
Dim epEnd As EnvDTE.EditPoint
Dim textSelection As EnvDTE.TextSelection
epStart = elt.GetStartPoint(vsCMPart.vsCMPartBody).CreateEditPoint()
epEnd = elt.GetEndPoint(vsCMPart.vsCMPartBody).CreateEditPoint()
textSelection = DTE.ActiveDocument.Selection
textSelection.MoveToPoint(epEnd)
textSelection.Insert(NewLine & "}" & NewLine)
textSelection.MoveToPoint(epStart)
textSelection.Insert(NewLine & "lock(lockTest){" & NewLine)
End If
End Sub
你是什麼意思完全相同?你能提供一個例子嗎? –
在該方法上使用[MethodImpl(MethodImplOptions.Synchronized)]屬性。 (http://stackoverflow.com/questions/2223656/what-does-methodimploptions-synchronized-do) –
@DarrenKopp謝謝。但是我想防止同時調用不同的靜態方法,而不僅僅是一種方法。 – Sandro