C # 2008
I use the code below to enter the softphone. However, the progressive login process is a long process, since there are many things that need to be initialized and checks need to be done, I just added a few here, as this will make the code write a lot.
In the code below, I check to see if CancellationPending, if CancelAsync was called in my cancel button click event, before doing each check. It's right? Also, if the verification fails, I also call CancelAsync and set e.Cancel to true.
I would like to know if my method that I used here is the best method to use.
Thanks so much for any advice,
private void bgwProcessLogin_DoWork(object sender, DoWorkEventArgs e) { /* * Perform at test to see if the background worker has been * cancelled by the user before attemping to continue to login. * * Cancel background worker on any failed attemp to login */ // Start with cancel being false as to reset this if cancel has been set to true // in the cancel button. e.Cancel = false; NetworkingTest connection_test = new NetworkingTest(); if (!this.bgwProcessLogin.CancellationPending) { // Check local LAN or Wireless connection if (!connection_test.IsNetworkConnected()) { // Update label if (this.lblRegistering.InvokeRequired) { this.lblRegistering.Invoke(new UpdateRegisterLabelDelegate(UpdateRegisterLabel), "No network connection"); } else { this.lblRegistering.Text = "No network connection"; } // Failed attemp this.bgwProcessLogin.CancelAsync(); e.Cancel = true; return; } // Report current progress this.bgwProcessLogin.ReportProgress(0, "Network connected"); } else { // User cancelled e.Cancel = true; return; } // Test if access to Server is available if (!this.bgwProcessLogin.CancellationPending) { if (!connection_test.IsSIPServerAvailable()) { // Update label if (this.lblRegistering.InvokeRequired) { this.lblRegistering.Invoke(new UpdateRegisterLabelDelegate(UpdateRegisterLabel), "Server unavailable"); } else { this.lblRegistering.Text = "Server unavailable"; } // Failed attemp this.bgwProcessLogin.CancelAsync(); e.Cancel = true; return; } // Report current progress this.bgwProcessLogin.ReportProgress(1, "Server available"); } else { // User cancelled e.Cancel = true; return; } . . . } private void bgwProcessLogin_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { // Check for any errors if (e.Error == null) { if (e.Cancelled) { // User cancelled login or login failed } else { // Login completed successfully } } else { // Something failed display error this.statusDisplay1.CallStatus = e.Error.Message; } } private void bgwProcessLogin_ProgressChanged(object sender, ProgressChangedEventArgs e) { this.lblRegistering.Text = e.UserState.ToString(); } private void btnCancel_Click(object sender, EventArgs e) { // Cancel the logging in process this.bgwProcessLogin.CancelAsync(); this.lblRegistering.Text = "Logged out"; }
source share