- 幾個
BackgroundWorkers
執行各種功能。 - 其中之一,只有一次,將不得不執行先做一項特殊工作,然後繼續並讓其他工作去完成他們的工作。
我正在使用Monitor.TryEnter
:當這是真的(鎖定成功)做這個特殊的工作;當它是假的時候,會等待鎖被釋放。
問題是這項特殊工作是異步完成的。我有一個偵聽器,並且將調用CompletedSpecialWork
方法,但是線程與執行Monitor.TryEnter
的線程不同(即,線程保持(鎖定)對象)。我需要一種方法能夠發送消息到原始線程,要求釋放該對象。
我試圖讓一個靜態對象SynchronizationContext
,但是當我做threadHoldingLock = SynchronizationContext.Current
它是空的(它是從BackgroundWorker被調用,能夠保持鎖)。
我的問題是:從這個CompletedSpecialWork
背景/線程,我怎麼能發送到原來的線程(持有鎖)通過Monitor.Exit
解除鎖定的請求?我需要一種方法來將Invoke發送到Monitor.Exit的原始線程上。
使用[Semaphore](https://msdn.microsoft.com/en-us/library/system.threading.semaphore(v = vs.110).aspx)。檢查[這個答案](http://stackoverflow.com/questions/9201848/how-to-transfer-locks-between-threads)。 –