dpl47
dpl47

Reputation: 184

How does .NET know when to continue to the next line of code?

I wrote this little bit of C# code to test an implementation I intend to use for an internal tool at work. Much to my surprise, it functions exactly as I hoped but I do not understand why.

private void button1_Click(object sender, EventArgs e)
    {
        WebClient wc = new WebClient();
        wc.DownloadFile("http://url censored", @"C:\Users\Dustin\Desktop\flashplayer.exe");

        bool dlComplete = System.IO.File.Exists(@"C:\Users\Dustin\Desktop\flashplayer.exe");

        if (dlComplete == true)
        {
            System.Diagnostics.Process.Start(@"C:\Users\Dustin\Desktop\flashplayer.exe");
        }
        else
        {
            System.Windows.Forms.MessageBox.Show("Something's jacked!");
        }

    }

When I press on button1, my machine downloads the Flash installer and then checks if the file exists (this is my roundabout way of avoiding event handlers which I have not learned to deal with yet), and continues on.

Why doesn't my computer check for the file's existence while the file is downloading? How does this wizard of a computer know to hold on a moment while the file download completes?

Upvotes: 0

Views: 99

Answers (2)

Xander Luciano
Xander Luciano

Reputation: 3893

For reference, here's a way that would work the way you didn't expect, asynchronously.

var webClient = new WebClient())
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync("http://www.server.com/file.txt", "C:\\file.txt");

In fact, there's a whole set of Asynchronous C# functions. It's worth reading up on if you're interested in getting into development.

https://msdn.microsoft.com/en-us/library/mt674882.aspx

Upvotes: 2

Chris Cruz
Chris Cruz

Reputation: 2029

WebClient.DownloadFile is a Synchronous method in which downloads to a local data file.

As stated on the MSDN link here - "[t]his methods blocks while downloading the resource."

In other words, the process is waiting for completion (blocking the calling function), before returning control and execution to the thread.

This results in the wizardry you're experiencing with the application knowing when to check for the file's presence. I know magic can be ruined once you know the trick; however, I hope this ins't the case..

Upvotes: 5

Related Questions