private void CheckUpdateElementText(TaskDialogUpdateElements updateFlags, TaskDialogUpdateElements flagToCheck,
     TaskDialogElements element, string text)
 {
     if ((updateFlags & flagToCheck) == flagToCheck)
     {
         IntPtr strPtr = Marshal.StringToHGlobalUni(text);
         try
         {
             // Note: SetElementText will resize the dialog while UpdateElementText will not (which would
             // lead to clipped controls), so we use the former.
             SendTaskDialogMessage(TaskDialogMessages.SetElementText, (int)element, strPtr);
         }
         finally
         {
             // We can now free the memory because SendMessage does not return until the
             // message has been processed.
             Marshal.FreeHGlobal(strPtr);
         }
     }
 }
 private void CheckUpdateIcon(TaskDialogUpdateElements updateFlags, TaskDialogUpdateElements flagToCheck,
     TaskDialogIconElement element, IntPtr icon)
 {
     if ((updateFlags & flagToCheck) == flagToCheck)
     {
         SendTaskDialogMessage(TaskDialogMessages.UpdateIcon, (int)element, icon);
     }
 }
 /// <summary>
 /// Updates the specified dialog elements with the values from the current properties.
 /// Note that when updating the main icon, the bar color will not change.
 /// </summary>
 /// <param name="updateFlags"></param>
 public void UpdateElements(TaskDialogUpdateElements updateFlags)
 {
     CheckUpdateElementText(updateFlags, TaskDialogUpdateElements.Content, TaskDialogElements.Content, Content);
     CheckUpdateElementText(updateFlags, TaskDialogUpdateElements.ExpandedInformation, TaskDialogElements.ExpandedInformation, ExpandedInformation);
     CheckUpdateElementText(updateFlags, TaskDialogUpdateElements.Footer, TaskDialogElements.Footer, Footer);
     CheckUpdateElementText(updateFlags, TaskDialogUpdateElements.MainInstruction, TaskDialogElements.MainInstruction, MainInstruction);
     CheckUpdateIcon(updateFlags, TaskDialogUpdateElements.MainIcon, TaskDialogIconElement.Main, (IntPtr)MainIcon);
     CheckUpdateIcon(updateFlags, TaskDialogUpdateElements.FooterIcon, TaskDialogIconElement.Footer, (IntPtr)FooterIcon);
 }