代码之家  ›  专栏  ›  技术社区  ›  Bem

在几分钟内将输入的字节数组流写入文件(C#)

  •  0
  • Bem  · 技术社区  · 7 年前

    我正在创建一个图形用户界面工具,通过串口从微处理器中提取数据。我想在提取字节数组时将其分块保存到.dat文件中。我尝试使用文件流,但这个过程需要几分钟,因此当文件流打开时GUI会冻结。

    我应该只存储提取的字节数组,然后在之后写入文件吗?我本来打算这么做,但它需要一个包含800多万个元素的字节数组,所以我认为这不是最好的主意。

    2 回复  |  直到 7 年前
        1
  •  0
  •   Julian A    7 年前

    如果您使用的是.NETFramework 4或更高版本,则可以使用任务。然后你也可以利用 ContinueWith

    Task writeTask = Task.Factory.StartNew(() =>
    {
        // Write to file
    }).ContinueWith(previousTask =>
    {
        // Update the UI
    });
    

    如果您使用的是较旧版本的.NET Framework,则可以使用 Task Parallel Library 或者显式使用线程。

    您可以通过创建一个新的线程池或使用线程池来实现这一点:

    Thread thread = new Thread(() =>
    {
        // Write to file
    });
    // Make the thread a background thread if you want it to be aborted
    // when the main thread is stopped, i.e. the application is closed:
    thread.IsBackground = true;
    thread.Start();
    

    ThreadPool.QueueUserWorkItem(state =>
    {
        // Write to file
    });
    

    相比创建新线程,我更喜欢使用任务而不是线程和线程池。但是,您必须记住,使用线程池并不保证直接执行,而是在线程池线程可用时执行。

        2
  •  0
  •   pm100    7 年前

    如果你想打开一个文件并抛出数据块,一个简单的方法是使用BlockingCollection。有一个线程正在等待集合,该线程拾取并写入数据块,然后在数据收集线程中将数据块发布到集合中