Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在几分钟内将输入的字节数组流写入文件(C#)_C#_Arrays_Filestream - Fatal编程技术网

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

在几分钟内将输入的字节数组流写入文件(C#),c#,arrays,filestream,C#,Arrays,Filestream,我正在创建一个GUI工具,通过串口从微处理器中提取数据。我想在提取字节数组时将其以块的形式保存到.dat文件中。我尝试使用文件流,但这个过程需要几分钟,因此当文件流打开时GUI会冻结 如何在长时间内多次保存到文件流而不冻结GUI 我应该只存储提取的字节数组,然后在之后写入文件吗?我本来打算这样做的,但是它需要一个包含800多万个元素的字节数组,所以我认为这不是最好的主意。如果你想打开一个文件并向它抛出数据块,一个简单的方法就是使用BlockingCollection。有一个线程正在等待集合,该线

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

如何在长时间内多次保存到文件流而不冻结GUI


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

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

如果您使用的是.NET Framework 4或更高版本,则可以使用任务。然后,您还可以使用
ContinueWith
方法在完成时更新UI:

Task writeTask = Task.Factory.StartNew(() =>
{
    // Write to file
}).ContinueWith(previousTask =>
{
    // Update the UI
});
如果您使用的是较旧版本的.NET Framework,则可以使用或显式使用线程

您可以通过创建新线程池或使用线程池来执行此操作:

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


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

在其他线程中执行我通常在后台工作进程中执行。与Thomas的建议相同。打开文件不会使UI冻结。用户界面冻结,因为您处于某个循环中。
ThreadPool.QueueUserWorkItem(state =>
{
    // Write to file
});