C# BackgroundWorker.ReportProgress是否保留BackgroundWorker\u DoWork线程?

C# BackgroundWorker.ReportProgress是否保留BackgroundWorker\u DoWork线程?,c#,listbox,backgroundworker,C#,Listbox,Backgroundworker,我使用BackgroundWorker触发一个线程,然后调用一个函数,该函数通过.ReportProgress()调用BackgroundWorker_ProgressChange 在ProgressChange中,我试图将条目写入日志文件,其中包含通过传递的对象接收的一些信息 我可以假设ProgressChange实际上持有BackgroundWorker线程吗?或者我会在日志中丢失一些数据 具体地说,我需要将项目添加到列表框中。有条件地,如果listbox.items.count>15,我想

我使用BackgroundWorker触发一个线程,然后调用一个函数,该函数通过.ReportProgress()调用BackgroundWorker_ProgressChange

在ProgressChange中,我试图将条目写入日志文件,其中包含通过传递的对象接收的一些信息

我可以假设ProgressChange实际上持有BackgroundWorker线程吗?或者我会在日志中丢失一些数据

具体地说,我需要将项目添加到列表框中。有条件地,如果listbox.items.count>15,我想枚举listbox.items并将它们写入日志文件

我有灵活的解决方案。列表框不“遗漏”条目不是强制性的

谢谢


Matt

如果ProgressChanged操作已发布,则DoWork不必等待。但是这对你的写作活动有什么影响呢


进度更新将按顺序进行,它们不会(不能)相互中断。只是要小心不要让它们太慢。

好吧,写一个文件可能是最慢的操作。“ProgressChanged操作已发布”是指它们排队吗?如果是,内存在哪里?我找不到关于这个的文档。在这里与一位开发人员(我是一名分析师/系统与网络人员)进行了回顾之后,很明显,依赖“ProgressChanged队列”来保存我提供的任何数据都会产生太可怕的增长问题。我将使用一个一维数组来保存,然后每隔大约50个项目刷新到日志文件。我想这里有几条线交叉了。Bgw及其进度报告旨在与GUI一起使用-更新列表框等。您正在写入文件的部分可以在DoWork线程中内联完成,也可以在另一个线程上使用ThreadPool或TPL完成。但是,使其线程安全应该是您主要关心的问题,而不是数据的大小。检查列表的计数,我将以给定的计数编写一个文件。您的回答表明,我可以在另一个线程中生成此“写入文件”操作,但您担心这会导致某种队列。因此,除了编写自己的队列处理程序之外,避免这种情况的最安全机制是什么?我应该不只是保持简单,而是让一个线程执行并保存文件吗?(免责声明:我是编程新手,刚刚阅读了线程安全方面的内容)这与最初的问题相差很远。也许在一个新问题中描述一下你需要什么。试着找出问题。谢谢你的帮助,亨克。似乎有很多关于线程安全和文件打开问题的深入讨论。这里有一个: