我创建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();
}
这为我工作,我进行了以下更改:
您的按钮单击应该看起来像这样。
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] 删除。
我来说两句