none
Многопоточность RRS feed

  • Вопрос

  • Здравствуйте!!! Кто может помоч с многопотоковым выводом информации?  У меня есть программа на C#, которая читает данные с двух файлов: в первом файле находятся четные числа, а во втором - нечетные. Мне нужно прочитать эти числа и:

    1.вывести их последовательно;

    2.вывести сначала четные, а потом нечетные числа.

    Программа работает, но она не синхронизирует потоки. А мне нужна именно синхронизация.  Кто-то подскажет что и куда нужно дописать в моем коде??? Буду очень благодарен))

    Предполагаю что нужно воспользоватся lock() {}   но я не понял как это сделать .... using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Threading; using System.Collections; namespace Lab5 { /// <summary> /// Главное окно приложения /// </summary> public partial class Form1 : Form { Thread t1, t2; // объявление потоков ThreadsRead th1 = new ThreadsRead(); ThreadsRead th2 = new ThreadsRead(); ArrayList NumOfEven = new ArrayList(); //четные числа ArrayList NumOfOdd = new ArrayList(); //нечетные числа /// <summary> /// Конструктор класса /// </summary> public Form1() { InitializeComponent(); } /// <summary> /// Выполняет обработку чтения данных из файла /// </summary> private void Process() { textBox1.Text = textBox2.Text = textBox3.Text = ""; t1 = new Thread(th1.ReadFile); t2 = new Thread(th2.ReadFile); t1.Start(@"Нечетные.txt"); t2.Start(@"Четные.txt"); t1.Join(); t2.Join(); NumOfOdd = th1.GetNumbers(); NumOfEven = th2.GetNumbers(); FillValuesOfFile(); } /// <summary> /// Заполняет значения прочитанных данных в поля textbox /// </summary> private void FillValuesOfFile() { foreach(int i in NumOfOdd) { textBox1.Text += i.ToString() + " "; } foreach (int i in NumOfEven) { textBox2.Text += i.ToString() + " "; } } /// <summary> /// Обработчик события нажатия на меню Выход /// </summary> /// <param name="sender">ссылка на объект, который будет генерировать событие</param> /// <param name="e">остальная информация</param> private void выходToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } /// <summary> /// Обработчик события нажатия на кнопку последовательного вывода чисел /// </summary> /// <param name="sender">ссылка на объект, который будет генерировать событие</param> /// <param name="e">остальная информация</param> private void button1_Click(object sender, EventArgs e) { Process(); for (int i = 0; i < NumOfOdd.Count; i++) { textBox3.Text += NumOfOdd[i] + " " + NumOfEven[i] + " "; } } /// <summary> /// Обработчик события нажатия на кнопку вывода сначала четных, а потом нечетных чисел /// </summary> /// <param name="sender">ссылка на объект, который будет генерировать событие</param> /// <param name="e">остальная информация</param> private void button2_Click(object sender, EventArgs e) { Process(); for (int i = 0; i < NumOfEven.Count; i++) { textBox3.Text += NumOfEven[i].ToString() + " "; } for (int i = 0; i < NumOfOdd.Count; i++) { textBox3.Text += NumOfOdd[i].ToString() + " "; } } } }

    • Перемещено I.Vorontsov 26 мая 2010 г. 6:23 (От:Visual C#)
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 21:35 MSDN Forums consolidation (От:Разработка Windows-приложений)

Ответы

  • Вот раз http://www.rsdn.ru/article/dotnet/CSThreading1.xml

    Вот два http://rsdn.ru/article/dotnet/CSThreading2.xml

    Где "два", там побольше про синхронизацию, но и на "раз" не стоит забивать.

    • Помечено в качестве ответа I.Vorontsov 26 мая 2010 г. 6:22

Все ответы