Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows窗体中调用触发异步API调用的操作时出现问题_C#_Multithreading_Windows Forms Designer - Fatal编程技术网

C# 在Windows窗体中调用触发异步API调用的操作时出现问题

C# 在Windows窗体中调用触发异步API调用的操作时出现问题,c#,multithreading,windows-forms-designer,C#,Multithreading,Windows Forms Designer,我有一个控制台应用程序,它要么调用类并作为控制台应用程序运行,要么触发windows窗体。windows窗体inturn发送参数并调用与其他方式相同的操作 调用点: static void Main(string[] args) { if(AppSettingsHelper.GetValue<bool>("EnableWindowsForm")) { System.Console.WriteLine("EnableW

我有一个控制台应用程序,它要么调用类并作为控制台应用程序运行,要么触发windows窗体。windows窗体inturn发送参数并调用与其他方式相同的操作

调用点:

  static void Main(string[] args)
    {
        if(AppSettingsHelper.GetValue<bool>("EnableWindowsForm"))
        {
            System.Console.WriteLine("EnableWindowsForm is set to true - Running Windows form");
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            //Application.Run(new Form1(0));

            //First Time
            var form = new ReportGeneratorForm();
            Application.Run(form);

        }
        else
        {
            System.Console.WriteLine("EnableWindowsForm is set to false - Running direct program in console");
            PortalMonitoring monitoring = new PortalMonitoring();
            monitoring.Process();
        }
    }
如果我触发控制台应用程序,它工作得很好。 但是,如果我单击该按钮,代码将停留在异步web api调用点上-代码下面

int reportID = GetReportIDAsync().Result;



 private static async System.Threading.Tasks.Task<int> GetReportIDAsync()
        {
            var reportName = "Portal name";
            var reportID = await ops.GetReportId(reportName);

            LogAndWriteToConsole("Report ID Feched : " + reportID.ToString());
            return reportID;
        }

请帮帮我,我认为windows窗体实际上不允许多线程。如何解决此问题?

您没有显示从monitoring.Process到GetReportIDAsync的完整路径,但它需要始终异步/等待

顶层应如下所示:

private async void button1_Click(object sender, EventArgs e)
{
    // probably add a try/catch here
    PortalMonitoring monitoring = new PortalMonitoring();
    await monitoring.Process(DateTime.Now); //Date as paramater- Default is null
}
然后,您的no winforms分支应该使用monitoring.Process.Wait

private async void button1_Click(object sender, EventArgs e)
{
    // probably add a try/catch here
    PortalMonitoring monitoring = new PortalMonitoring();
    await monitoring.Process(DateTime.Now); //Date as paramater- Default is null
}