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任务,异步模式。只要研究一下,你就会发现这既不能回答问题,也不会对显示的代码有帮助。