2.6. Downloading Files on Demand
If you look at Figure 1-8, you will also notice that the Help.txt file always downloads when you deploy the application using ClickOnce. However, users won't use this file unless they click on the Display Help button. If you have a large-size help file, this adds to the download time for your users. And if you have multiple help files in your application, then the entire application will also take longer to install. A better approach is to selectively download the help files as and when you need them. For example, you can set the help file to download after the application installs, when a user clicks on the Display Help button.
To specify that the help file be loaded as and when needed, you need to perform the following steps:
The Application Files window should now look like Figure 1-9.
Figure 1-9. Changing the default publish statuses of files
Setting the Publish Status of Help.txt to Include means the file will not download automatically to your user's computer, thus you make installation time quicker for your user.
Modify the code-behind for the Display Help button as follows:
Private Sub btnDisplayHelp_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles btnDisplayHelp.Click '---Need to add "Imports System.Deployment.Application"--- '---if this is a ClickOnce application--- If ApplicationDeployment.IsNetworkDeployed Then MyAppDeployment = ApplicationDeployment.CurrentDeployment MyAppDeployment.DownloadFileGroupAsync("Help") End If End Sub
Tip: Remember to add the following statement at the top of the code-behind: Imports System.Deployment.Application
Determine if the application uses ClickOnce. You can do so by checking the IsNetworkDeployed property of the ApplicationDeployment class. If this is a ClickOnce application, proceed to download the files grouped under the Help group. Notice that I used the asynchronous method DownloadFileGroupAsync() to prevent the UI from freezing. For this, you need to also service the DownloadFileGroupCompleted event, which is fired when the download is completed. As this event is called whenever a download is complete (and you may be downloading several groups all at once), you need to check the current download group before you take action on it. In this case, when the download of the file is completed, you display the content of the help file.
Code the DownloadFileGroupCompleted() event as follows:
Private Sub DownloadFileGroupCompleted( _ ByVal sender As Object, _ ByVal e As DownloadFileGroupCompletedEventArgs) _ Handles MyAppDeployment.DownloadFileGroupCompleted '---If the completed Download group is Help--- If e.Group.Equals("Help") Then '---Display the content of the file--- MsgBox(My.Computer.FileSystem.ReadAllText("Help.txt")) End If End Sub