Помогите с визуальным программированием? - PullRequest
0 голосов
/ 06 июня 2010

Я пытаюсь продублировать экран блокировки политики Impero.

Я пытаюсь выполнить поиск моей программы, чтобы увидеть, существует ли файл. Концепция заключается в том, что если файл существует, он будет запущен.

Что лучше использовать фоновый рабочий для его поиска? Если так, то как я могу заставить его искать это?

Любые предложения о том, как реализовать желаемый функционал?

1 Ответ

0 голосов
/ 06 июня 2010

Поскольку вы не указали язык или структуру, я предполагаю, что вы используете C #. Вы сказали:

Я пытаюсь выполнить поиск моей программы, чтобы увидеть, существует ли файл. Концепция заключается в том, что если файл существует, он будет запущен.

Вот короткий фрагмент, который будет делать то, что вы просили.

string path = @"C:\path\to\file";

if (File.Exists(path))
{
   Process p = new Process();
   p.StartInfo.FileName = path; // launches the default application for this file
   p.Start();
}

Это немного упрощенно: p.Start () может выдавать исключения по ряду причин. Кроме того, у вас мало контроля над , которое приложение открывает файл - это полностью зависит от реестра пользователя. Например, если пользователь выбирает файл HTML для открытия, некоторые пользователи увидят файл, открытый с помощью Internet Explorer, в то время как другие пользователи будут иметь установленный Firefox, и поэтому Firefox будет использоваться для просмотра файла.

Обновление:

Обычно я ищу файлы, используя следующее:

string[] matches = Directory.GetFiles(@"C:\", "*.txt");

Возвращает все пути ко всем файлам на диске C:\, заканчивающимся .txt. Конечно, ваш шаблон поиска будет другим.

Если вызов Directory.GetFiles () (или что вы используете - вы не указали) занимает много времени, тогда да, использование BackgroundWorker - это хороший подход. Вот как вы можете это сделать. В конструкторе класса (вы можете назвать его SearchFiles):

string searchPattern;
string searchDirectory;

BackgroundWorker worker;

string[] matches;

/// <summary>
/// Constructs a new SearchFiles object.
/// </summary>
public SearchFiles(string pattern, string directory)
{
         searchPattern = pattern;
         searchDirectory = directory;

         worker = new BackgroundWorker();
         worker.DoWork += FindFiles;
         worker.RunWorkerCompleted += FindFilesCompleted;

         worker.RunWorkerAsync();
}

void FindFilesCompleted(object sender, RunWorkerCompletedEventArgs e)
{
      if (e.Error == null)
      {
         // matches should contain all the 'found' files.

         // you should fire an event to notify the caller of the results
      }
}


void FindFiles(object sender, DoWorkEventArgs e)
{
      // this is the code that takes a long time to execute, so it's
      // in the DoWork event handler.
      matches = System.IO.Directory.GetFiles(searchDirectory,searchPattern);
}

Надеюсь, это ответит на ваш вопрос!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...