/// <summary>
        /// Writes the database to disk.
        /// </summary>
        private void WriteDatabaseToDisk()
        {
            if (GameDataLog.HasChanges())
            {
                Logger.Log("Flushing dataset to disk", Category.Info, Priority.None);
                try
                {
                    string fileName = Path.Combine(CreateDataDirectory(), GetDataSetFileName());

                    using (ReaderWriterLockMgr impactLockMgr = new ReaderWriterLockMgr(GameDataLog.Impacts.Lock))
                        using (ReaderWriterLockMgr scoreLockMgr = new ReaderWriterLockMgr(GameDataLog.Scores.Lock))
                        {
                            impactLockMgr.EnterWriteLock();
                            scoreLockMgr.EnterWriteLock();
                            foreach (var row in GameDataLog.Impacts.Where(row => row.Timestamp.Date != DateTime.Today).ToList())
                            {
                                GameDataLog.Impacts.RemoveImpactsRow(row);
                            }
                            foreach (var row in GameDataLog.Scores.Where(row => row.Timestamp.Date != DateTime.Today).ToList())
                            {
                                GameDataLog.Scores.RemoveScoresRow(row);
                            }
                            GameDataLog.AcceptChanges();
                            GameDataLog.WriteXml(fileName, XmlWriteMode.WriteSchema);
                        }
                }
                catch (IOException ex)
                {
                    Logger.Log(ex.GetBaseException().ToString(), Category.Exception, Priority.High);
                    EventAggregator.GetEvent <ApplicationEvents.NotifyUserEvent>().Publish(new ApplicationEvents.NotifyUserEvent()
                    {
                        Message = "Trying to write game data. " + ex.GetBaseException().Message,
                        Buttons = System.Windows.MessageBoxButton.OK,
                        Image   = System.Windows.MessageBoxImage.Error
                    });
                }
            }
            else
            {
                Logger.Log("Skipping flushing of dataset (no changes)", Category.Info, Priority.None);
            }
        }
        /// <summary>
        /// Writes the database to disk.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="e">The <see cref="System.ComponentModel.DoWorkEventArgs"/> instance containing the event data.</param>
        private void WriteDatabaseToDisk()
        {
            if (_dataLog.HasChanges())
            {
                _logger.Log("Flushing dataset to disk", Category.Info, Priority.None);
                try
                {
                    string fileName = Path.Combine(CreateDataDirectory(), GetDataSetFileName());

                    using (ReaderWriterLockMgr impactLockMgr = new ReaderWriterLockMgr(_dataLog.Impacts.Lock))
                        using (ReaderWriterLockMgr scoreLockMgr = new ReaderWriterLockMgr(_dataLog.Scores.Lock))
                        {
                            impactLockMgr.EnterWriteLock();
                            scoreLockMgr.EnterWriteLock();
                            foreach (var row in _dataLog.Impacts.Where(row => row.Timestamp.Date != DateTime.Today).ToList())
                            {
                                _dataLog.Impacts.RemoveImpactsRow(row);
                            }
                            foreach (var row in _dataLog.Scores.Where(row => row.Timestamp.Date != DateTime.Today).ToList())
                            {
                                _dataLog.Scores.RemoveScoresRow(row);
                            }
                            _dataLog.AcceptChanges();
                            _dataLog.WriteXml(fileName, XmlWriteMode.WriteSchema);
                        }
                }
                catch (IOException ex)
                {
                    _logger.Log(ex.GetBaseException().ToString(), Category.Exception, Priority.High);
                    //FIXME: Need to handle this exception with a user notification
                }
            }
            else
            {
                _logger.Log("Skipping flushing of dataset (no changes)", Category.Info, Priority.None);
            }
        }