2012-07-09 216 views
1

假設您正在調用方法異步到UI線程上。同步異步調用的方法?

隨着

UIDispatcher.BeginInvoke(new Action(_insert), DispatcherPriority.Normal, new object[] { }) 

你正在做的調用。從現在起,運行時環境決定何時執行該方法,而程序繼續其「正常」執行路徑。

我現在想知道是否有任何機制在返回時同步這些異步執行的方法?看起來,與使用多個線程時幾乎有相同的問題。

但是被認爲是線程之前被異步調用的返回方法?這似乎不是如此,因爲通常的同步努力如

lock (someObject) { //... } 

或使用專用鎖似乎不起作用。

附錄:

哪裏出現這個問題我的實際情況如下:

異步調用方法調用作爲其最後聲明靜態類的return方法。在這個return方法裏,一個常用的資源(一個List)必須被同步。考慮以下(概觀樣)代碼剪斷例舉:

// A simple method that gets invoked asynchronously 
public void _insert() { 

    // do some code 

    StaticClass.Returned(); 
} 


public static StaticClass { 

    //... 

    public static void Returned() { 

     // use a shared resource ! 
    } 

} 
+1

'的BeginInvoke()'返回一個['DispatcherOperation'](http://msdn.microsoft.com/en-us/library/system.windows.threading.dispatcheroperation.aspx),讓您等待異步調用完成並獲取結果;你在找什麼? – millimoose 2012-07-09 14:18:29

+0

以及我需要一種方法來確保'Returned'方法內的代碼被執行互斥。 DispatcherOperation對象似乎是有用的工具,但我認爲它不會幫助我實現這一目標。 – 2012-07-09 14:22:56

+0

相互排斥什麼?您只能顯示一個對共享資源的訪問權限。我發現非常令人懷疑的是,'lock'將不起作用,如果沒有,你可能有更多的任何對象的實例作爲信號量 - 在調試器中檢查。 – millimoose 2012-07-09 14:23:45

回答