文件未上传Windows窗体C#

用户名

我创建Windows服务和安装项目。我创建一个Windows表单来为我的安装项目上传文件。

我的问题是,当我单击文件上传时,我的文件没有上传。而且表单也不会关闭。

我的Windows服务的ProjectInstaller

public override void Install(IDictionary stateSaver)
{
    base.Install(stateSaver);

    Form1 validationForm = new Form1(Context.Parameters["TARGETDIR"]);
    validationForm.ShowDialog();
}

Windows表格

private static string folderToUploadFile = string.Empty;
public Form1(string folder)
{
    InitializeComponent();
    folderToUploadFile = folder;
    label1.Text = folder;
}

private void button1_Click_1(object sender, EventArgs e)
{
    var task = new Thread(() => {

        try
        {
            OpenFileDialog fileDialog = new OpenFileDialog();
            fileDialog.Filter = "Dat files |*.dat";
            fileDialog.Multiselect = false;

            if (fileDialog.ShowDialog() == DialogResult.OK)
            {
                var filename = fileDialog.FileName;
                Task.Run(() =>
                {
                    File.Copy(filename, folderToUploadFile);
                    this.Close();
                });

            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }


    });
    task.SetApartmentState(ApartmentState.STA);
    task.Start();
    task.Join();
}
瑞安·托马斯(Ryan Thomas)

这为我工作,我进行了以下更改:

  1. 使用Task.Factory.StartNew代替Task.Run
  2. 添加了一些用于合并路径的逻辑。

您的按钮单击应该看起来像这样。

try
{
    OpenFileDialog fileDialog = new OpenFileDialog();
    //fileDialog.Filter = "Dat files |*.dat";
    fileDialog.Multiselect = false;

    if (fileDialog.ShowDialog() == DialogResult.OK)
    {
        var fullPath = fileDialog.FileName;
        var fileName = Path.GetFileName(fullPath);

        var destination = Path.Combine(folderToUploadFile, fileName);

        Task.Factory.StartNew(() =>
        {
            File.Copy(fullPath, destination);
            this.Close();
        });

    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

请注意,手动将文件复制到安装目录,这意味着它们在卸载后仍会保留,因此您可能希望进行处理。

编辑:

实际上,您实际上不需要Task.Factory.StartNew()。...Task.Run应该可以正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章