文件未从 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();
}
这对我有用,我做了以下更改:
- 使用Task.Factory.StartNew代替Task.Run
- 添加了一些组合路径的逻辑。
您的按钮点击应如下所示。
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 应该是一样的。
我创建了一个 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();
}
这对我有用,我做了以下更改:
- 使用Task.Factory.StartNew代替Task.Run
- 添加了一些组合路径的逻辑。
您的按钮点击应如下所示。
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 应该是一样的。