미국에서 호스팅되는 라이브 WCF 서비스가 있습니다. 전 세계 모든 곳에서 사용할 수있는 Windows Forms 응용 프로그램에서이 응용 프로그램에 액세스하려고합니다. 현재 인도에서 테스트 중이며 미국 내 호스팅 웹 서비스에 액세스하려고합니다. 이 응용 프로그램은 모든 연결 속도와 서버에서 멀리 떨어진 곳에서 사용할 수 있습니다. 따라서 서버의 응답 속도가 다를 수 있습니다. 내가 결정한 것은 사용자가 일부 기능을 수행 할 때 응용 프로그램이 UI를 먼저 업데이트 한 다음 백그라운드에서 서버 업데이트 작업을 수행한다는 것입니다. 이렇게하면 응용 프로그램이 멈추거나 매달릴 수 없습니다. 다음은 이러한 시나리오 중 하나입니다. 하지만 문제는 비동기 함수와 스레드를 사용하여 UI와 서버를 업데이트 할 때도 응용 프로그램이 여전히 멈추고 있다는 것입니다.인터넷 속도가 낮고 멀리 떨어진 WCF 웹 서비스를 사용하는 Windows Forms 클라이언트의 사용자 환경 개선
실제로 저는 좋아하는 것과 그렇지 않은 것 사이에서 토글하는 역할을하는 버튼이 있습니다. 사용자가 그것을 클릭하면, 그것을 달리로 변경해야합니다 그리고 그것은 백그라운드에서 서버를 업데이 트하는 스레드를 실행합니다. 버튼의 클릭 이벤트에 대한 코드는 다음과 같은 :
async private void btnLike_Click(object sender, EventArgs e)
{
new System.Threading.Thread(new System.Threading.ThreadStart(changeLike)).Start();
await LikeContent();
}
changeLike
기능 :
private void changeLike()
{
if(btnLike.Text.Equals("Like"))
btnLike.Text="Unlike";
else
btnLike.Text="Like";
}
LikeContent
기능 :
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()
기능은 사용자의 취향을 업데이트하는 WCF 웹 서비스 기능입니다 서버에. reloadLikes()
은 사용자가 콘텐츠를 좋아 한 후에 서버에서 좋아요 수를 업데이트합니다.
내 코드를 수정하면 응용 프로그램이 잠시 얼어서 LIKE 버튼을 업데이트하는 대신 LIKE 버튼을 즉시 업데이트 할 수 있습니다. 이 "언젠가"는 인터넷 속도가 떨어지는 사용자에게 나쁜 인상을 남길 것입니다.
귀하의'changeLike()가'스레드에 적합하지 않습니다, 당신은 확신이 확인을 실행
reloadLikes()
? –왜 새 스레드에서'changeLike()'를 호출합니까? 그냥 직접 부르세요. –
작업을 위해 전용 스레드가 필요하지 않는 한 스레드 생성은'ThreadPool'과'Tasks'를 위해 피해야합니다. 너는하지 않는다. – user2586804