C# 运行其他代码时显示控制台微调器(等待指示器)
在我的应用程序中,我尝试使用简单的下载指示器C# 运行其他代码时显示控制台微调器(等待指示器),c#,event-handling,C#,Event Handling,在我的应用程序中,我尝试使用简单的下载指示器 class Program { static void Main() { ConsoleSpinner spin = new ConsoleSpinner(); spin.Start(); DownloadFile(); spin.Stop(); Console.ReadKey(); Environment.Exit(0); }
class Program
{
static void Main()
{
ConsoleSpinner spin = new ConsoleSpinner();
spin.Start();
DownloadFile();
spin.Stop();
Console.ReadKey();
Environment.Exit(0);
}
private static void DownloadFile()
{
Uri url = new Uri("https://website.com");
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
try
{
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
using (Stream file = File.OpenWrite(@"C:\test.txt"))
using (Stream input = response.GetResponseStream())
{
input.CopyTo(file);
}
}
}
catch (Exception ex)
{
throw;
}
}
}
感谢您的帮助
更新
这是我要求的解决方案
class Program
{
private static BackgroundWorker worker = new BackgroundWorker();
static void Main()
{
worker.DoWork += worker_DoWork;
worker.WorkerSupportsCancellation = true;
Console.Write("Downloading ");
worker.RunWorkerAsync();
DownloadFile();
worker.Cancel.Async();
Console.ReadKey();
Environment.Exit(0);
}
private static void DownloadFile()
{
Uri url = new Uri("https://website.com");
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
try
{
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
string savePath = @"C:\download\test.txt";
using (Stream file = File.OpenWrite(savePath))
using (Stream input = response.GetResponseStream())
{
input.CopyTo(file);
}
}
}
catch (Exception ex)
{
throw;
}
}
static void worker_DoWork(object sender, DoWorkEventArgs e)
{
int i = 0;
while (true)
{
if (worker.CancellationPending) break;
i++;
Console.CursorVisible = false;
switch (i % 4)
{
case 0: Console.Write("|"); break;
case 1: Console.Write("/"); break;
case 2: Console.Write("-"); break;
case 3: Console.Write("\\"); break;
}
Console.SetCursorPosition(Console.CursorLeft - 1, Console.CursorTop);
Thread.Sleep(200);
}
}
}
更新#2
完成。您是否尝试过与Task异步进行DownloadFile函数调用 看起来您希望您的
控制台内部
(或下载)代码在另一个执行线程上运行,但spinner甚至阻止了您的(单个)线程开始下载文件。我认为这个问题在给定的问题中没有得到回答,这个问题是关于异步工作加载和更新控制台的,而且我有一个答案!我想我需要使用BackgroundWorker
@AntoshaShmonoff任务是您的朋友,在DownloaderSync方法中使用wait request.GetResponseAsync()
,然后使用while(wait Task.whenay(downloadTask,Task.Delay(1000))!=downloadTask){Console.Write(“.”;}
等待它。@AntoshaShmonoff任务,异步模式。只要研究一下,你就会发现这既不能回答问题,也不会对显示的代码有帮助。