Я второе предложение Mutex, но вы также можете взглянуть на транзакции. Оберните весь код в транзакцию (для этого требуется using System.Transactions
):
using(TransactionScope scope = new TransactionScope())
{
try
{
/* ... your current code here */
scope.Complete();
}
catch (Exception e)
{
/* Any appropriate error handling/logging here */
}
finally
{
}
}
Транзакция автоматически блокирует все связанные таблицы. Вы можете уменьшить ограничения и разрешить другим процессам читать, но не записывать данные, к которым относится ваш процесс. Это можно сделать, передав параметры конструктору TransactionsScope.