BackgroundWorker hide form window upon completion

為{幸葍}努か 提交于 2019-12-13 07:34:54

问题


I'm having some trouble with hiding a form when a BackgroundWorker process is completed.

private void submitButton_Click(object sender, EventArgs e)
{
    processing f2 = new processing();
    f2.MdiParent = this.ParentForm;
    f2.StartPosition = FormStartPosition.CenterScreen;
    f2.Show();
    this.Hide();

    backgroundWorker1.RunWorkerAsync();
}

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
    // loop through and upload our sound bits
    string[] files = System.IO.Directory.GetFiles(System.Environment.GetFolderPath(System.Environment.SpecialFolder.MyDocuments) + "\\wav", "*.wav", System.IO.SearchOption.AllDirectories);
    foreach (string soundBit in files)
    {
        System.Net.WebClient Client = new System.Net.WebClient();
        Client.Headers.Add("Content-Type", "audio/mpeg");
        byte[] result = Client.UploadFile("http://mywebsite.com/upload.php", "POST", soundBit);
    }
}

private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    formSubmitted f3 = new formSubmitted();
    f3.MdiParent = this.ParentForm;
    f3.StartPosition = FormStartPosition.CenterScreen;
    f3.Show();
    this.Hide();
}

Basically, after the 'submit' button is pressed, the application begins to upload the files to the webserver via a php script. Once the upload is complete, the RunWorkerCompleted method is triggered, opening the formSubmitted form. The issue I'm having is that the processing form does not close once the backgroundworker is complete and the formSubmitted opens directly on top of the processing form - as opposed to what I want, having the processing form close and then open the formSubmitted form.


回答1:


Well actually you are never closing processing form:

try following:

private processing _processingForm;

private void submitButton_Click(object sender, EventArgs e)
{
    _processingForm = new processing();
    _processingForm.MdiParent = this.ParentForm;
    _processingForm.StartPosition = FormStartPosition.CenterScreen;
    _processingForm.Show();

    this.Hide(); //HIDES THE CURRENT FORM CONTAINING SUBMIT BUTTON

    backgroundWorker1.RunWorkerAsync();
}

Now on completion hide processing form:

private void backgroundWorker1_RunWorkerCompleted(object sender,
                                        RunWorkerCompletedEventArgs e)
{
    formSubmitted f3 = new formSubmitted();
    f3.MdiParent = this.ParentForm;
    f3.StartPosition = FormStartPosition.CenterScreen;

    _processingForm.Close();//CLOSE processing FORM

    f3.Show();

    this.Hide();//this REFERS TO THE FORM CONTAINING WORKER OBJECT
}


来源:https://stackoverflow.com/questions/18006369/backgroundworker-hide-form-window-upon-completion

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!