This sample code worked for me:
protected override async void OnClick()
{
try
{
var environment = Geoprocessing.MakeEnvironmentArray(overwriteoutput: true);
var defaultGDB = Project.Current.DefaultGeodatabasePath;
var srcLayer = "TestPoints";
var srcGdb = @"C:\Data\FeatureTest\FeatureTest.gdb";
var outputFeatureClass = @"TestTestPoints";
var fields = new string[] {
@"TheDate ""TheDate"" true true false 8 Date 0 0,First,#,TestPoints,TheDate,-1,-1",
@"CodePoint ""CodePoint"" true true false 4 Long 0 0,First,#,TestPoints,CodePoint,-1,-1",
@"TheString ""TheString"" true true false 255 Text 0 0,First,#,TestPoints,TheString,0,255",
@"TheInteger ""TheInteger"" true true false 4 Long 0 0,First,#,TestPoints,TheInteger,-1,-1",
@"TheDouble ""TheDouble"" true true false 8 Double 0 0,First,#,TestPoints,TheDouble,-1,-1",
@"NewString ""NewString"" true true false 255 Text 0 0,First,#,TestPoints,TheString,0,255'" };
var fieldMap = string.Join (";", fields);
var toolParameters = Geoprocessing.MakeValueArray(srcLayer, srcGdb, outputFeatureClass, null, fieldMap, null);
GPExecuteToolFlags executeFlags = GPExecuteToolFlags.AddOutputsToMap | GPExecuteToolFlags.GPThread | GPExecuteToolFlags.AddToHistory | GPExecuteToolFlags.RefreshProjectItems;
IGPResult gpResult = await Geoprocessing.ExecuteToolAsync("FeatureClassToFeatureClass", toolParameters, environment, null, null, executeFlags);
Geoprocessing.ShowMessageBox(gpResult.Messages, "GP Messages", gpResult.IsFailed ? GPMessageBoxStyle.Error : GPMessageBoxStyle.Default);
}
catch (Exception ex)
{
MessageBox.Show($@"Error: {ex}");
}
}