замените последний символ первым символом для каждой строки в текстовом поле, используя многопоточность - PullRequest
0 голосов
/ 03 апреля 2020

у меня есть 3 текстовых поля и две кнопки, в первом текстовом поле указывается (n) количество строк и символов в каждой строке, первая кнопка случайным образом генерирует (n) количество строк во втором текстовом поле, вторая кнопка будет читать строки из второго текстового поля, а затем заменить последний символ каждой строки первым символом. Мой вопрос заключается в том, что мне нужно знать, как сделать этот процесс с использованием многопоточности (в зависимости от Environment.ProcessorCount), это мой код так далеко:

    public partial class Form1 : Form
{


    static int processorCount = Environment.ProcessorCount;
    Thread[] arrThr = new Thread[processorCount];
    static char[][] array;


    public Form1()
    {
        InitializeComponent();

    }

    private void button1_Click(object sender, EventArgs e)
    {
        int size = Convert.ToUInt16(textBox1.Text);
        textBox2.Text = null;
        textBox3.Text = null;

        Random random = new Random(Convert.ToInt16(DateTime.Now.Second));
        array = new char[size][];

        for (int i = 0; i < array.Length; i++)
        {
            array[i] = new char[size];
            for (int j = 0; j < array[i].Length; j++)
            {
                array[i][j] = (char)random.Next(33, 122);
                textBox2.Text += Convert.ToString(array[i][j]);
            }
            textBox2.Text += "\r\n";
        }        
    }

    private void button3_Click(object sender, EventArgs e)
    {
        var lines = new List<string>(textBox2.Lines);
        for (int i = 0; i < lines.Count - 1; i++)
        {
            lines[i] = lines[i].Replace(lines[i].ToCharArray().Last(), lines[i].ToCharArray().First());
        }
        textBox3.Lines = lines.ToArray();
    }
}

1 Ответ

0 голосов
/ 03 апреля 2020

Для начала, я думаю, что вы разместили код не работает должным образом, потому что метод Replace заменит все экземпляров одного символа другим (не только последним), поэтому если есть другие символы, которые соответствуют последнему в строке, они также будут заменены.

Чтобы исправить это, код можно записать примерно так:

for (int i = 0; i < lines.Count - 1; i++)
{
    lines[i] = lines[i].Substring(0, lines[i].Length - 1) + lines[i].First();
}

Для запуска этот код параллельно,. NET Framework имеет Parallel.For l oop, который можно использовать:

Parallel.For(0, lines.Count - 1, i =>
{
    lines[i] = lines[i].Substring(0, lines[i].Length - 1) + lines[i].First();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...