关闭已在运行[C#]的线程中的流
我有多个线程运行的下载。我想关闭流,比如当用户点击暂停/停止下载。如何关闭在线程中运行的下载文件流?您可以在共享内存中使用一个标志,并定期从线程中检查它,以确定是开始等待(或关闭流)还是下载下一个块。一种方法是在循环中的线程中对缓冲区进行流式处理。每次要获取另一块数据时,请检查是否已启用“暂停”属性。如果有,只需跳过迭代,直到它被设置回true关闭已在运行[C#]的线程中的流,c#,multithreading,stream,C#,Multithreading,Stream,我有多个线程运行的下载。我想关闭流,比如当用户点击暂停/停止下载。如何关闭在线程中运行的下载文件流?您可以在共享内存中使用一个标志,并定期从线程中检查它,以确定是开始等待(或关闭流)还是下载下一个块。一种方法是在循环中的线程中对缓冲区进行流式处理。每次要获取另一块数据时,请检查是否已启用“暂停”属性。如果有,只需跳过迭代,直到它被设置回true stream.Close(); 这样,您的流不会关闭,但会暂停下载任何其他数据。您可以拥有一个事件对象(MaunalResetEvent\AutoRe
stream.Close();
这样,您的流不会关闭,但会暂停下载任何其他数据。您可以拥有一个事件对象(MaunalResetEvent\AutoResetEvent)。在需要停止线程时发出事件信号。在线程例行程序中,检查事件是否发出信号,并在关闭文件流时停止处理。您可以使用后台工作线程并使用内置的取消事件,而不是调用
thread.Abort()
调用worker.CancelAsync()
来引发事件。例如,这可能来自按钮或按键
然后在worker\u DoWork
方法中,您有以下内容:
if (worker.CancellationPending)
{
// close the stream
}
else
{
// Carry on downloading
}
在执行下载的循环中,这是否可行?只是一个建议,我不是超级热线程。保留处理下载的类,这样行吗
public class Threader
{
MyDownloader md;
public void UserClicksDownload()
{
md = new MyDownloader();
Thread t = new Thread(md.DownloadStuff);
t.Start();
Thread.Sleep(100);
}
public void UserClicksStop()
{
t.Abort();
t = null;
md.StopDownloading();
}
}
public class MyDownloader
{
public void DownloadStuff()
{
while (true)
{
Console.WriteLine("downloading stuff!");
}
}
public void StopDownloading()
{
Console.WriteLine("Tidy up you downloads here");
}
}
你能给我一个更简洁的答案吗?我认为它不能变得更简洁。把小溪关上。什么阻止了您?Thread.Abort是一个核心选项,应该在正常处理中避免(例如用户“暂停”或“取消”操作)。有关问题和备选方案的讨论,请参阅。您能告诉我们是什么阻止您关闭正在使用流的线程中的流吗?