У меня очень странное поведение при использовании FolderBrowserDialog в приложении C #.После отображения FolderBrowserDialog некоторые события не будут запускаться в приложении, например, событие DoWork в BackgroundWorker или событие Renamed в FileSystemWatcher.
Обратите внимание, что эта проблема возникает только на определенных компьютерах.Проблема не возникает ни на моей машине разработки, ни на многих других производственных машинах, имеющих такое же оборудование (ЦП Xeon W3550), что и машины, на которых возникает проблема.Все машины, на которых работает приложение, находятся под Windows XP SP3.
Мне удалось выделить проблему в очень простом приложении.Код показан ниже:
public partial class Form1 : Form
{
BackgroundWorker backgroundWorker;
public Form1()
{
InitializeComponent();
listBox1.Items.Add("Initialization");
backgroundWorker = new BackgroundWorker();
backgroundWorker.WorkerReportsProgress = true;
backgroundWorker.WorkerSupportsCancellation = true;
backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork);
backgroundWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
}
private void Form1_Load(object sender, EventArgs e)
{
listBox1.Items.Add("Running worker");
FolderBrowserDialog folderbrowserDialog = new FolderBrowserDialog();
folderbrowserDialog.ShowDialog(); // If this line is removed, the worker runs as expected
backgroundWorker.RunWorkerAsync();
}
void backgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 0; i <= 5; i++)
{
backgroundWorker.ReportProgress(i * 20);
Thread.Sleep(1000);
}
}
void backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
listBox1.Items.Add("Worker completed");
}
void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
listBox1.Items.Add("Task progress: " + e.ProgressPercentage.ToString());
}
После запуска FolderBrowserDialog я запускаю приложение и получаю 2 снимка ниже, а затем нажимаю кнопку «ОК» или «Отмена» в форме FolderBrowserDialog.Dev PC Я получаю это:

На машине, где я получаю проблему, BackgroundWorker не запускается, потому что событие DoWork никогда не запускается:

Если в коде удалена следующая строка, рабочий работает на всех машинах, как и ожидалось.
folderbrowserDialog.ShowDialog();
Дополнительная информация
- Если я заменю FolderbrowserDialog на OpenFileDialog, рабочий будет работать как положено.Так что, похоже, он действительно связан с компонентом FolderbrowserDialog ...
- Несколько недель назад я пытался установить Visual Studio на компьютер, на котором возникла проблема.Приложение запускалось, как и ожидалось, только при запуске из отладчика.Проблема возникла при запуске без отладки.
- Миграция на .NET FW 3.0 и 4.0 не решила проблему
- Пользователь, вошедший в Windows, имеет права администратора
- ЗаменаПК не решил проблему
Не могли бы вы объяснить, как это может вызвать FolderbrowserDialog?