これを意図したものはありませんが、 System.Diagnostics.PerformanceCounterを使用できます。レジストリを使用することもできますが、プロセス全体で読み取り/書き込みアクセスをシリアル化する必要があります。
System.Diagnostics.PerformanceCounter pc
= new System.Diagnostics.PerformanceCounter("SeqCounter", "SeqInstance");
long myVal=pc.Increment();
編集
考えれば考えるほど、これは素晴らしい解決策になると思います。Increment は、システム上のすべてのプロセスで機能するアトミック操作を通じてカウンターを 1 増やします。
編集
あなたの編集に基づいて、パフォーマンス カウンターの使用はお勧めしません。パフォーマンス カウンターは、複数のプロセス間で調整する方法でした。内部実装がどのようにコーディングされているかわかりません。
静的変数を使用してインクリメントできないのはなぜですか? これをスレッドセーフにしたい場合は、何かをロックする必要があります。
System.Threading.Interlocked.Increment
参考までに: 32 ビット システムでロング バージョンを使用する場合、スレッド セーフである必要はありません。
私が使用した実装を表示するための編集 (DS):
public static class Int32Sequencer
{
private static Int32 lastSequence = Int32.MinValue;
private static Object lockObject = new Object();
public static Int32 GetNextSequence()
{
lock (lockObject)
{
unchecked { lastSequence++; }
return lastSequence;
}
}
}