簡體   English   中英

NewsAPI C# 庫在控制台上運行,掛在 winforms 上

[英]NewsAPI C# library runs on console, hangs on winforms

我在 Visual Studio 2017 Community Edition 下運行了網站上給出的示例,並且運行良好。 但是,當我嘗試在 winforms 庫上運行它時,它掛起,即使給出了完全相同的術語:

主機版

static void Main(string[] args)
{
    var newsApiClient = new NewsApiClient("KeyRedacted");
    var articlesResponse = newsApiClient.GetEverything(new EverythingRequest
    {
        Q = "Apple",
        SortBy = SortBys.Popularity,
        Language = Languages.EN,
        From = new DateTime(2018, 10, 16)
    });
    if (articlesResponse.Status == Statuses.Ok)
    {

    //code here

Winforms 版本

private void btnSearch_Click(object sender, EventArgs e)
{
    var newsApiClient = new NewsApiClient("keyredacted");
    var articleResponse = newsApiClient.GetEverything(new EverythingRequest
    {
        Q = "Apple",
        SortBy = SortBys.Popularity,
        Language = Languages.EN,
        From = new DateTime(2018, 10, 16)
    });  //this is where it hangs

    if (articleResponse.Status == Statuses.Ok)
    {

假設您正在使用這個 client您正在調用方法使用Task.Result ,這可能會導致死鎖 似乎合理,因為代碼/簽名和示例匹配。

我會像這樣為 WinForms 重寫您的代碼:

private async void btnSearch_Click(object sender, EventArgs e)
{
    var newsApiClient = new NewsApiClient("keyredacted");
    var articleResponse = await newsApiClient.GetEverythingAsync(new EverythingRequest
    ...

如果您對不在代碼中使用異步方法感到厭煩,您可以嘗試在Task.Run(() => /* stuff */);運行它Task.Run(() => /* stuff */);

另見: https : //blogs.msdn.microsoft.com/pfxteam/2012/04/13/should-i-expose-synchronous-wrappers-for-asynchronous-methods/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM