- public void ThreadSaveFileDialog(string sourceFileName)
- {
- Thread importThread = new Thread(new ParameterizedThreadStart(SaveDialog));
- importThread.SetApartmentState(ApartmentState.STA); // 重点
- importThread.IsBackground = true;
- importThread.Start(sourceFileName);
- }
- public static MainForm ScratchForm;// 这个是主窗口
- private void SaveDialog(object sourceFileName)
- {
- SaveDialogShow(sourceFileName as string);
- }
- delegate void SaveDialogShowCallBack(string sourceFileName);
- private void SaveDialogShow(string sourceFileName)
- {
- // 判断主窗口是否跨线程调用
- if (ScratchForm.InvokeRequired)
- {
- SaveDialogShowCallBack stcb = new SaveDialogShowCallBack(SaveDialogShow);
- ScratchForm.Invoke(stcb, new object[] { sourceFileName });
- }
- else
- {
- // 将 saveFileDialog 附加上主 From 上, 否则的话点击主窗口会把 savefiledialog 给遮挡住. 重复点击保存会弹出多个 savefiledialog
- result = ScratchForm.saveFileDialog.ShowDialog(ScratchForm);
- if (result == DialogResult.OK)
- {
- string destFileName = ScratchForm.saveFileDialog.FileName;
- Task.Run(() =>
- {
- File.Copy(sourceFileName, destFileName, true);
- });
- }
- }
- }
来源: http://www.bubuko.com/infodetail-2619302.html