C# 在Windows窗体中调用触发异步API调用的操作时出现问题
我有一个控制台应用程序,它要么调用类并作为控制台应用程序运行,要么触发windows窗体。windows窗体inturn发送参数并调用与其他方式相同的操作 调用点: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
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
}