使用并行编程从文本文件添加数据

时间:2018-12-10 03:08:20

标签: c# asynchronous parallel-processing

我试图从.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”来说,它们都是精确的路径,只是不想有两行长长的文件位置。 这是我需要做的,但是要使用多线程,并行编程或异步编程来完成。

1 个答案:

答案 0 :(得分:0)

如果您在异步处理之后阻止表单锁定在表单加载事件中,则可以执行以下操作。

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);
}