/// <summary> /// 添加代理 /// </summary> public void addHandler <T>(T handler) { if (handler == null) { return; } if (typeof(T) == typeof(onBegin)) { beginHandler += handler as onBegin; } else if (typeof(T) == typeof(onDrag)) { dragHandler += handler as onDrag; } else if (typeof(T) == typeof(onEnd)) { endHandler += handler as onEnd; } }
public static bool GetPasswordAndDecryptFile(Form1.OpenFileDialogContext context, out FileInfo fi, out byte[] bt, bool AcceptEmptyPassword = false, bool noMsg = false, bool keyFromFile = false, onEnd ended = null) { fi = new FileInfo(context.dialog.FileName); int countOfTryes = -1; bt = null; DoublePasswordForm pwdForm1, pwdForm2 = null; do { countOfTryes++; pwdForm1 = new DoublePasswordForm(1, fi.Name); pwdForm1.ShowDialog(); if (pwdForm1.resultText == null) { return(false); } if (pwdForm1.fromFile) { break; } if (AcceptEmptyPassword && pwdForm1.resultText.Length == 0) { return(true); } if (!AcceptEmptyPassword && pwdForm1.resultText.Length < 6) { MessageBox.Show("Извините, но введённый текст настолько мал, что не может являться паролем", "Шифрование", MessageBoxButtons.OK, MessageBoxIcon.Stop); continue; } if (fi.Length > 1024 * 1024 || countOfTryes > 1) { pwdForm2 = new DoublePasswordForm(2, fi.Name, true); pwdForm2.ShowDialog(); if (pwdForm2.cancel) { pwdForm1.clearResultText(); return(false); } if (!String.IsNullOrEmpty(pwdForm2.resultText) && pwdForm1.resultText != pwdForm2.resultText) { pwdForm1.clearResultText(); pwdForm2.clearResultText(); if (MessageBox.Show("Введённые пароли не равны друг другу\r\nХотите попробовать ещё раз?", "Шифрование", MessageBoxButtons.YesNo) != System.Windows.Forms.DialogResult.Yes) { return(false); } continue; } pwdForm2.clearResultText(); } break; }while (true); GC.Collect(); if (ended == null) { GetPasswordAndDecryptFile(fi, out bt, pwdForm1); if (bt == null) { if (!noMsg) { if (MessageBox.Show("Расшифровка файла '" + fi.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop) == System.Windows.Forms.DialogResult.Retry) { return(false); // continue; } else { return(false); } } else { return(false); } } return(true); } else { var fif = fi; #if forLinux { byte[] bd; GetPasswordAndDecryptFile(fif, out bd, pwdForm1); ended(fif, bd); if (bd == null) { if (!noMsg) { MessageBox.Show("Расшифровка файла '" + fif.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop); // == System.Windows.Forms.DialogResult.Retry } } } #else ThreadPool.QueueUserWorkItem (delegate { byte[] bd; GetPasswordAndDecryptFile(fif, out bd, pwdForm1); ended(fif, bd); if (bd == null) { if (!noMsg) { MessageBox.Show("Расшифровка файла '" + fif.Name + "' не удалась - возможно, введён неверный пароль", "Расшифровка", MessageBoxButtons.OK, MessageBoxIcon.Stop); // == System.Windows.Forms.DialogResult.Retry } } } ); #endif return(true); } }