文件未从 C# 上传 windows

File doesn't upload windows form 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();
}

这对我有用,我做了以下更改:

  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 应该是一样的。