2
我想通過使用信號來控制對Windows剪貼板的訪問。我需要這個信號量在整個應用程序中是全局的,因爲多個線程訪問信號量以將數據保存到Windows剪貼板。我面臨的問題是信號量永遠不會減少計數器。無論有多少線程訪問信號量,總是1。如何實現全局信號量類
namespace Global.GlobalLocks
{
static public class Clipboard
{
static public readonly SemaphoreSlim ClipboardSemaphore = new SemaphoreSlim(1);
}
}
這裏是我如何使用上面的代碼:
namespace Automator.Global
{
static public class ClipBoard
{
static private string _data = string.Empty;
static public void SetData(string data)
{
GlobalLocks.Clipboard.ClipboardSemaphore.Wait();
_data = data;
Thread t = new Thread(Set);
t.SetApartmentState(ApartmentState.STA);
t.Start();
GlobalLocks.Clipboard.ClipboardSemaphore.Release();
}
static private void Set()
{
Clipboard.Clear();
Clipboard.SetDataObject(_data, true);
}
static public string GetData()
{
return _data;
}
}
}
「的旗語從未遞減計數器」讀旗語櫃檯裏面是不是看它是否工作好辦法。請嘗試正確解釋您的問題。 – Euphoric
而不是使用'_data'字段,我認爲更好的方法是使用lambda。例如。 '新線程(()=>設置(數據))'。 – svick
信號量不保護任何東西,這是沒有必要的。 –