using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using FLY.Thick.Base.IService;
using FObjBase;
using System.ComponentModel;
using System.Threading;
namespace FLY.Thick.Base.UI
{
///
/// Window_SaveDatas.xaml 的交互逻辑
///
public partial class WdSaveDatas : FLY.ControlLibrary.WindowBigClose
{
ISaveManager mManager;
public WdSaveDatas()
{
InitializeComponent();
}
public void Init(ISaveManager manager)
{
mManager = manager;
this.DataContext = mManager;
}
private void button_open_Click(object sender, RoutedEventArgs e)
{
System.Windows.Forms.SaveFileDialog open = new System.Windows.Forms.SaveFileDialog();
open.Filter = "csv文件|*.csv";
open.Title = "保存数据";
open.FileName = System.IO.Path.GetFileName(mManager.SavePath);
if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{
mManager.SavePath = open.FileName;
}
}
private void button_save_Click(object sender, RoutedEventArgs e)
{
FLY.ControlLibrary.Window_Tip.Show("数据保存", "等待。。。。", TimeSpan.FromSeconds(2));
mManager.Save(SaveReturn, null);
this.Close();
}
private void SaveReturn(object asyncContext, object retData)
{
Dispatcher.BeginInvoke(new AsyncCBHandler(_SaveReturn), asyncContext, retData);
}
private void _SaveReturn(object asyncContext, object retData)
{
bool ret = (bool)retData;
if (ret)
{
FLY.ControlLibrary.Window_Tip.Show("数据保存", "成功输出到" + mManager.SavePath, TimeSpan.FromSeconds(2));
}
else
{
FLY.ControlLibrary.Window_Tip.Show("数据保存", "保存失败", TimeSpan.FromSeconds(2));
}
}
}
public interface ISaveManager
{
string SavePath { get; set; }
///
/// 成功或失败,会调用 asyncDelegate
///
///
///
void Save(AsyncCBHandler asyncDelegate, object asyncContext);
}
public abstract class SaveManager : ISaveManager, INotifyPropertyChanged
{
public string SavePath { get; set; }
public void PreSave()
{
string directory = System.IO.Path.GetDirectoryName(SavePath);
if (string.IsNullOrEmpty(directory))
{
directory = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
}
SavePath = directory + @"\" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".csv";
}
AsyncCBHandler asyncDelegate;
object asyncContext;
protected void Return(bool state)
{
asyncDelegate?.Invoke(asyncContext, state);
}
///
/// 成功或失败,会调用 AsyncDelegate
///
///
///
public void Save(AsyncCBHandler asyncDelegate, object asyncContext)
{
//需要异步!!!!
this.asyncDelegate = asyncDelegate;
this.asyncContext = asyncContext;
//先复制数据出来
//再开一个线程输出到csv
if (!Backup())
{
Return(false);
}
else
{
Thread t = new Thread(Output);
t.Start();
}
}
///
/// 备份数据
///
protected abstract bool Backup();
protected abstract void Output();
#region INotifyPropertyChanged 成员
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
}