private IntPtr MakeNewString(string text, TaskDialogNativeMethods.TaskDialogElements element) { var newStringPtr = Marshal.StringToHGlobalUni(text); updatedStrings[(int)element] = newStringPtr; return(newStringPtr); }
private void UpdateTextCore(string s, TaskDialogNativeMethods.TaskDialogElements element) { AssertCurrentlyShowing(); FreeOldString(element); SendMessageHelper( TaskDialogNativeMethods.TaskDialogMessages.SetElementText, (int)element, (long)MakeNewString(s, element)); }
// Checks to see if the given element already has an updated string, and if so, frees it. This is done in preparation for a call to // MakeNewString(), to prevent leaks from multiple updates calls on the same element within a single native dialog lifetime. private void FreeOldString(TaskDialogNativeMethods.TaskDialogElements element) { var elementIndex = (int)element; if (updatedStrings[elementIndex] != IntPtr.Zero) { Marshal.FreeHGlobal(updatedStrings[elementIndex]); updatedStrings[elementIndex] = IntPtr.Zero; } }