public void ExportAndCloseAsync() { if (this.Parent != null) { IntPtr main = this.Parent.Handle; Voucher bData = Canvas.Data; bData.VoucherImage = (Bitmap)Canvas.BackgroundImage; var cnts = Canvas.Controls.Find(ManualInsertDataControl.MANUALINSERT_DATACONTROL_NAME, true); if (cnts != null && cnts.Length != 0) { ManualInsertDataControl cnt = (ManualInsertDataControl)cnts[0]; if (!string.IsNullOrEmpty(cnt.BarCodeString)) { bData.Parse(cnt.BarCodeString); } else { string[] str = cnt.BarCodeNumberGroups; bData.CountryID = int.Parse(str[0]); //bData.Business = int.Parse(str[1]); bData.RetailerID = int.Parse(str[2]); bData.VoucherID = str[3]; bData.BarCodeString = string.Format("{0:000}{1:00}{2:000000}{3:000000000}", bData.CountryID, "na", bData.RetailerID, bData.VoucherID); } } new Action <Voucher>((data) => { Debug.Assert(data != null); Debug.Assert(data.VoucherImage != null); lock (data.VoucherImage) { try { DelegateUtils.CreateAuditIdReloadDelegate().FireAndForget(); data.SiteCode = AuditIDSTable.SelectRemoveFirstOrEmpty().ThrowIfDefault <string, AppExclamationException>(); data.Validate(); ClientDataAccess.UpdateFileAsync((DbClientVoucher)data, new EventHandler((o, s) => { string fileName = Path.ChangeExtension( string.Format("{0}{1}", PTFUtils.GetMachine(), DateTime.Now).ReplaceAll(new char[] { '.', '/', '\\', '-' }, '_'), ".xml"); //Data has been saved successfully. string text = string.Concat(Strings.VScan_ItemSaved, fileName); WinMsg.SendText(main, text); this.InvokeSf(() => { //Set DialogResult OK //Or else the form will resign to close this.DialogResult = DialogResult.OK; this.Close(); }); }), //No error handling. //General processing handler. null); } catch (Exception ee) { ee.AddNext(new MethodInvoker(() => { Canvas.InvokeSf(() => { Canvas.ShowInputControl(ee.Message); }); })); throw; } } }).FireAndForget(bData); } }
static void Main() { Application.SetUnhandledExceptionMode(UnhandledExceptionMode.ThrowException); #if DEBUG InDebug = true; #endif //Register application exception handler ThreadBase.Error += OnError; AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); Application.ThreadException += OnError; SQLWorker.Default.Error += OnError; SettingsTable.Default.Error += OnError; ClientDataAccess.ConnectionString = ConfigurationManager.AppSettings[Strings.Scan_ConnectionString].ToStringSf(); #if !INSTALL_SRV //Try start stransffering service. WARNING: Should be installed. UIUtils.TryStartTransferringServiceAsync(); #endif //Load settings SettingsTable.Default.Read(); //Zero day counter if (SettingsTable.Get <DateTime>(Strings.VScan_LastStarted, DateTime.Now).Date < DateTime.Now.Date) { SettingsTable.Set(Strings.VScan_ScanCount, 0); } SettingsTable.Get <UniqueList <UserAuth> >(Strings.Transferring_AuthObjectList, new UniqueList <UserAuth>(new UserAuthComparer()) { UserAuth.DefaultAdmin, UserAuth.Rosen, UserAuth.Default }); Thread.CurrentThread.CurrentUICulture = SettingsTable.Get <CultureInfo>(Strings.Transferring_CurrentUICultureInfo, new CultureInfo("en")); ScanAppContext.QueryCountryesAsync(); //Set last started. SettingsTable.Set(Strings.VScan_LastStarted, DateTime.Now); //Start sql pool SQLWorker.Default.Start(ThreadPriority.Lowest, "VScan.SQLWorker"); //Show splash Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new SplashScreen()); //Start pipe server to the tranferring service ScanAppContext.Default = new ScanAppContext(new MainForm()); //Load SiteIDs DelegateUtils.CreateAuditIdReloadDelegate().FireAndForget(); //Set application printer //If no printer is set this will set default printer as application printer string defaultPrinterName = PrintManager.GetDefaultPrinterName(); SettingsTable.Get(Strings.VScan_ApplicationPrinterName, defaultPrinterName); //Start application Application.Run(ScanAppContext.Default); //Stop pipe server //Wait pool empty. Stop it. SQLWorker.Default.Empty.WaitOne(); SQLWorker.Default.Stop(); //Save settings SettingsTable.Default.Save(); //Unregister application error handler ThreadBase.Error -= OnError; Application.ThreadException -= OnError; SQLWorker.Default.Error -= OnError; SettingsTable.Default.Error -= OnError; }