Av olika anledningar så behöver vi låsa ett objekt i en tråd mha Monitor.Enter(foo); men sedan låsa upp från en annan tråd, och det funkar ju inte utan smäller med SynchronizationLockException vilket ju är något suboptimalt från vår synvinkel. Eftersom du i alla fall vill kringå det inbyggda låset känns det nästan lättare att implementera en egen låsmetodik som inte kontrollerar att lås/upplås går på samma tråd. njae, i så fall bör man väl använda Semaphore istället för att uppfinna ett eget fyrkantigt hjul.Monitor.Exit från annan tråd
    
    
- I normala fall så är trådtillhörigheten en bra sak, så vill helst inte byta till Semaphore
- trådarna i frågan är *inte* UI trådar, så SyncronizationContext.Current är null
- Thread.CurrentContext såg lovande ut men funkade inte det heller
- try/catch runt skiten verkar ju funka, men ser ju inte precis snyggt ut...
<b>Så, hur göra?</b>
ps. lite leksakskod om nån vill testa
            Context ctx = Thread.CurrentContext;
            Debug.Print("Current tread {0} ctx id {1}", 
                Thread.CurrentThread.ManagedThreadId, Thread.CurrentContext);           
            Monitor.Enter(lockObject);
            ThreadPool.QueueUserWorkItem(delegate(object dummy)
            {
                Debug.Print("Pool tread {0} ctx id {1}", 
                    Thread.CurrentThread.ManagedThreadId, Thread.CurrentContext);
                ctx.DoCallBack(delegate()
                {
                    Debug.Print("Cross ctx thread {0} ctx id {1}", 
                        Thread.CurrentThread.ManagedThreadId, Thread.CurrentContext);
                    try
                    {
                        Monitor.Exit(lockObject);
                    }
                    catch (SynchronizationLockException) { }                    
                });
            });
            Thread.Sleep(1000);
            if (Monitor.TryEnter(lockObject))
            {
                Debug.Print("success");
                Monitor.Exit(lockObject);
            }
EDIT: Semaphore skall det vara som inte kollar trådtillhörighet
    Sv: Monitor.Exit från annan tråd
    
    
Min ogenomtänkta måhända naiva lösning skulle vara att lägga in objektet du vill låsa på i en hash-tabell och ta bort den därifrån när du vill låsa upp. Då skulle du kunna använda ett vanligt lock() runt hash-tabellen när du låser, låser upp och kontrollerar om något är låst.
/johan/Sv:Monitor.Exit från annan tråd