Search code examples
c#webclient

How to pass parameter to DownloadProgressChanged or DownloadFileCompleted?


I have this code below

    public void DownloadFile(string payloadFile)
    {                  
            new Thread(() =>
            {
                using (WebClient wc = new WebClient())
                {
                    // code removed for brevity

                    // How to I pass payloadFile parameter to two event handler below?
                    wc.DownloadProgressChanged += HandleDownloadProgress;
                    wc.DownloadFileCompleted += HandleDownloadComplete;

                    wc.DownloadFileAsync(uri, _downloadPath + payloadFile);
                }
            }).Start();                               
    }

    public void HandleDownloadComplete(object sender, AsyncCompletedEventArgs args)
    {
        // I need to get payloadFile parameter here
    }


    public void HandleDownloadProgress(object sender, DownloadProgressChangedEventArgs args)
    {
        // I need to get payloadFile parameter here          
    }

How to I pass payloadFile parameter to two event handler above?


Solution

  • Pass payloadFile as userToken parameter:

    wc.DownloadFileAsync(uri, _downloadPath + payloadFile, payloadFile);
    

    After that you can get it from args:

    public void HandleDownloadComplete(object sender, AsyncCompletedEventArgs args)
    {
        string payloadFile = (string)args.UserState;
    }
    
    public void HandleDownloadProgress(object sender, DownloadProgressChangedEventArgs args)
    {
        string payloadFile = (string)args.UserState;
    }