У меня странная проблема в приложении, которое я пишу.
Он читает основной файл конфигурации xml, создает локальную копию для пользователя, а затем выполняет некоторые действия, описанные в файле xml. Он проверяет, нуждается ли обновление в локальном XML-файле, поэтому не нужно делать это каждый раз.
Каждое из действий выполняется в новом потоке, и как только все потоки завершены, он записывает журнал и сообщает пользователю о завершении.
Одним из действий является импорт файла .reg в реестр. Я делаю это так:
Process regeditProcess = Process.Start("regedit.exe", "/s " + RegFilePath);
regeditProcess.WaitForExit();
regeditProcess.Close();
У меня проблема в том, что если приложение создает новый файл конфигурации, тогда процесс regedit может занять до 30 секунд. Если он не создает его, он завершается в течение секунды.
В цикле, который проверяет завершение потоков, я поместил
Application.DoEvents();
Если я не сделаю этого, процесс regedit запустится, и если я подожду достаточно долго, я получу сообщение об обнаружении ContextSwitchDeadlock отладчика. Я попытался использовать другой файл .reg и только запустить это одно действие, но все тот же.
Создание xml-файла происходит в главном рабочем потоке до того, как предприняты какие-либо действия, но я уверен, что это как-то на него влияет, я просто не уверен, что именно.
Я знаю, что это немного странный сценарий, но кто-нибудь уже сталкивался с чем-то подобным?