簡體   English   中英

文件不上傳 Windows 表單 C#

[英]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();
}

窗體

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 應該工作相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM