Добавить данные из текстового файла с помощью параллельного программирования - PullRequest
0 голосов
/ 10 декабря 2018

Я пытаюсь прочитать данные из файла .txt, сохранить их в списке, а затем использовать параллельное программирование, чтобы сделать это дважды в одно и то же время.У меня есть 2 файла .txt, содержащие кучу чисел, чтобы сложить.Я объявляю оба файла, затем сохраняю их в объектах List.

    private void Form1_Load(object sender, EventArgs e)
{
    var file1 = @"filepath.txt";
    var file2 = @"filepath.txt";
    List<string> List = File.ReadAllLines(file1).ToList();
    List<string> List2 = File.ReadAllLines(file2).ToList();

    int num = 0;
    int num2 = 0;

    for(int i = 0; i < List.Count i++)
    {
        num += Convert.ToInt16(List[i].ToString());
    }

    for(int i = 0; i < List2.Count; i++)
    {
        num2 += Convert.ToInt16(List2[i].ToString());
    }
    listBox1.Items.Add(num);
    listBox2.Items.AddNum
}

Что касается для @ "filepath.txt", они оба являются точными путями, просто не хотят иметь 2 длинные строкирасположение файла.Это то, что мне нужно сделать, но сделать это с помощью многопоточности, параллельного программирования или асинхронного программирования.

1 Ответ

0 голосов
/ 10 декабря 2018

Если вы после асинхронного процесса, который предотвращает блокировку формы в событии загрузки формы, вы можете сделать что-то вроде этого.

private async void Form1_Load(object sender, EventArgs e)
{
    await Task.Factory.StartNew(() =>
    {
      //Your code here
    },  CancellationToken.None, TaskCreationOptions.None,  TaskScheduler.FromCurrentSynchronizationContext());
}

Если вы хотите включить параллелизм в вашу программу, вы можете сделать что-токак это.

private async void Form1_Load(object sender, EventArgs e)
{
    TaskScheduler taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
    await Task.Factory.StartNew(() =>
    {
        ParallelOptions options = new ParallelOptions();
        options.TaskScheduler = taskScheduler;
        Parallel.Invoke(options,
            () =>
            {
                //Update your listBox1
            },
            () =>
            {
                //Update your listBox2
            }
            );
    }, CancellationToken.None, TaskCreationOptions.None, taskScheduler);
}
...