4

米国でホストされているライブ WCF サービスがあります。世界中どこからでも使える Windows Forms アプリケーションからアクセスしたい。現在、インドでテストしており、米国でホストされている Web サービスにアクセスしようとしています。このアプリケーションは、任意の接続速度から、サーバーから任意の距離で使用できます。そのため、サーバーからの応答速度は異なる場合があります。私が決めたのは、ユーザーが何らかの機能を実行すると、アプリケーションが最初に UI を更新し、次にバックグラウンドでサーバー更新タスクを実行するということです。これにより、アプリケーションのフリーズやハングを防ぐことができます。以下は、これらのシナリオの 1 つです。しかし、問題は、非同期関数とスレッドを使用して UI とサーバーを更新しているにもかかわらず、アプリケーションがまだフリーズしていることです。

Actually I have a button that acts as a toggle between like and unlike. When a user clicks it, it should change to unlike and then it runs a thread that updates the server in background. Following is the code for the Button's click event:

async private void btnLike_Click(object sender, EventArgs e)
{
      new System.Threading.Thread(new System.Threading.ThreadStart(changeLike)).Start();
      await LikeContent();
}

changeLike function:

private void changeLike()
{
     if(btnLike.Text.Equals("Like"))
             btnLike.Text="Unlike";
     else
             btnLike.Text="Like";
}

LikeContent function:

async Task<int> LikeContent()
{
      await Global.getServiceClient().addContentLikeAsync(cid, uid);

      System.Threading.Thread t = new System.Threading.Thread(new System.Threading.ThreadStart(reloadLikes));
      t.Start();
      return 0;
}

addContentLikeAsync() function is a WCF web-service function that updates user likes on server. reloadLikes() updates the number of likes from the server after user liked the content.

Please tell me how can I modify my code so that application instantly updates the LIKE button instead of freezing for some time and then updating the LIKE button? Because this "sometime" will create a bad impression on users having less internet speed.

4

1 に答える 1