4
A
回答
5
由于WriteAllBytes
是一种同步方法,因此您无法对操作进行任何操作,直到它完成。
你需要做的是有一个像WriteAllBytes这样的方法,但是写成异步的,比如http://msdn.microsoft.com/en-AU/library/jj155757.aspx。您可以每隔一段时间让异步方法停止并将其进度报告给GUI,因为它分开运行。
8
编号
您需要使用循环写入块中的字节。像下面的东西应该让你开始。请注意,这需要在后台线程中运行。我在使用WinForms,你可以使用BackgroundWorker
。
using(var stream = new FileStream(...))
using(var writer = new BinaryWriter(stream)) {
var bytesLeft = array.Length; // assuming array is an array of bytes
var bytesWritten = 0;
while(bytesLeft > 0) {
var chunkSize = Math.Min(64, bytesLeft);
writer.WriteBytes(array, bytesWritten, chunkSize);
bytesWritten += chunkSize;
bytesLeft -= chunkSize;
// notify progressbar (assuming you're using a background worker)
backgroundWorker.ReportProgress(bytesWritten * 100/array.Length);
}
}
编辑:正如Patashi在下面指出的,你也可以在你的任务中等待。我认为我的方法非常简单,并且不需要任何额外的线程资源(除了需要执行操作的一个后台线程外)。这是传统方式,运作良好。
相关问题
- 1. C#Winform - 学习异步/等待 - 如何更新进度条
- 2. 第一步学习WEBGL中的学习矩阵
- 3. 如何学习Zend
- 4. 如何学习agda
- 5. 如何学习MDX
- 6. 如何学习EXTJS
- 7. 如何学习C++
- 8. 如何学习SEO?
- 9. 如何学习objectArx?
- 10. 如何学习SOAP?
- 11. 如何学习ExpressJS?
- 12. 进度4GL基础学习
- 13. 机器学习 - 培训步骤
- 14. 需要帮助学习跑步时间
- 15. 如何学习画布/ ActionScript?
- 16. 如何快速学习CSLA.NET?
- 17. 如何学习Netsuite SuiteScript
- 18. 如何学习silverlight 4.0
- 19. 如何学习primefaces javascript API?
- 20. 如何学习DirectShow编程?
- 21. 如何快速学习Silverlight?
- 22. 如何用Ruby学习TDD?
- 23. 如何开始学习SharePoint
- 24. 我如何学习Oracle JDeveloper?
- 25. 如何学习调试?
- 26. 学习如何使用xe:dominoViewEntriesTreeNode
- 27. 如何开始学习Android?
- 28. 如何学习CakePHP的
- 29. 学习如何使用Subversion
- 30. 如何学习Java5或Java6?
不,您需要使用['FileStream.Write'](例如http://msdn.microsoft.com/en-us/library/system.io.filestream.write.aspx)制作自己的函数。 – Blorgbeard 2013-03-17 22:46:44