Хорошо, отправляя ответ на мой собственный вопрос. Из того, что я могу сказать, , этот является идеальным способом реализации Mutex
, который:
WaitOne
был успешным. Надеюсь, это поможет кому-то!
using (Mutex mut = new Mutex(false, MUTEX_NAME))
{
if (mut.WaitOne(new TimeSpan(0, 0, 30)))
{
try
{
// Some code that deals with a specific TCP port
// Don't want this to run twice in multiple processes
}
catch(Exception)
{
// Handle exceptions and clean up state
}
finally
{
mut.ReleaseMutex();
}
}
}
Обновление. Некоторые могут утверждать, что если код в блоке try
помещает ваш ресурс в нестабильное состояние, вы должны not отпустить Mutex и вместо этого оставить его заброшенным. Другими словами, просто позвоните mut.ReleaseMutex();
, когда код завершится успешно, а не поместите его в блок finally
. Код, приобретающий Mutex, мог бы поймать это исключение, а сделать правильную вещь .
В моей ситуации я не изменяю какое-либо состояние. Я временно использую TCP-порт и не могу одновременно запускать другой экземпляр программы. По этой причине, я думаю, что мое решение выше, но ваше мнение может быть другим.
попробуйте
RINGER_MODE_NORMAL Этот режим используется для установки режима звонка в устройстве. RINGER_MODE_SILENT Этот режим используется для установки бесшумного режима на устройстве. RINGER_MODE_VIBRATE Этот режим используется для установки режима вибрации в устройстве.
попробуйте этот код ...
создать экземпляр класса AudioManager, вызвав метод getSystemService () с аргументом Context.AUDIO_SERVICE. Как только мы создадим экземпляр класса AudioManager, мы сможем использовать метод setRingerMode () для установки громкости или режимов звонка нашего устройства. основываясь на наших требованиях. КОД:
AudioManager aManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
aManager.setRingerMode(AudioManager.RINGER_MODE_SILENT);
с помощью метода getRingerMode () класса AudioManager мы можем легко получить текущий режим звонка устройства.
AudioManager aManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
int currentMode = aManager.getRingerMode();
if(currentMode == AudioManager.RINGER_MODE_NORMAL){
// Do your code
}