private void ThreadSafeEditMapping(Mapping mapping)
 {
     //what makes this thread safe is that it'll dispatch to the UI thread if necessary
     if (InvokeRequired)
     {
         ThreadSafeEditMappingHandler invoker = ThreadSafeEditMapping;
         Invoke(invoker, new object[] { mapping });
     }
     else
     {
         try
         {
             using (NewMappingDialog newMappingDialog = new NewMappingDialog())
             {
                 DialogResult result = newMappingDialog.EditMapping(m_ProductsAndApplications, m_ProjectsAndAreas, m_Priorities, mapping);
                 if (result == DialogResult.OK)
                 {
                     mappingsGrid.Refresh();
                 }
             }
         }
         finally
         {
             UseWaitCursor = false;
             EnableRuleButtons();
         }
     }
 }
 private void ThreadSafeAddMapping()
 {
     //what makes this thread safe is that it'll dispatch to the UI thread if necessary
     if (InvokeRequired)
     {
         MethodInvoker invoker = ThreadSafeAddMapping;
         Invoke(invoker);
     }
     else
     {
         try
         {
             using (NewMappingDialog newMappingDialog = new NewMappingDialog())
             {
                 Mapping      newMapping;
                 DialogResult result = newMappingDialog.AddMapping(m_ProductsAndApplications, m_ProjectsAndAreas, m_Priorities, out newMapping);
                 if (result == DialogResult.OK)
                 {
                     m_WorkingCommonConfig.Mappings.Add(newMapping);
                 }
             }
         }
         finally
         {
             UseWaitCursor = false;
             EnableRuleButtons();
         }
     }
 }