c # программа зависает во время чтения / записи - PullRequest
1 голос
/ 18 мая 2011

У меня есть программа, написанная на C #, она много читает из файлов с диска и затем выводит несколько текстовых строк, а не много, возможно, 100 вершин в текстовые файлы.

Программазамерзает примерно на полпути, я новичок в c # и программировании в целом из исследований кажется, что мне нужно использовать отдельный поток от потока, который контролирует форму.Два вопроса,

  1. Должен ли я использовать новый поток для чтения и новый для записи или только один для функции чтения?

  2. Каков наилучший способ сделать это?

Надеюсь, это имеет смысл, и я очень ценю вашу помощь!

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

BackgroundWorker - лучшая вещь для использования здесь.Вот хороший учебник , который описывает все его события и свойства.

Вкратце это то, что вы должны сделать.

  1. Создайте фоновый рабочий экземпляр иустановите соответствующие свойства , как вам нужно.
  2. Добавьте весь код обработки ввода-вывода в DoWork , который будет выполняться в отдельном потоке.
  3. Добавьте все логики, которые вы хотите выполнить после обработки IОперация / O для RunWorkerCompleted , которая будет выполняться в главном потоке.Здесь вы можете обновить свой пользовательский интерфейс или делать то, что вы хотите, в главном потоке.(Вы можете получить доступ к результату через свойство RunWorkerCompletedEventArgs.Result)

Самая важная вещь, которую нужно иметь в виду, это то, что оба события ProgressChanged и RunWorkerCompleted выполняютсяв главном потоке, где вы можете обновить пользовательский интерфейс, используя результаты фонового рабочего.Только фоновое событие DoWork , выполняющееся в фоновом потоке.

0 голосов
/ 18 мая 2011

Если перед записью должно произойти полное чтение, вам нужен только один поток, в противном случае вы можете использовать два.

...