米国でホストされているライブ 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.