2013-11-23 23 views
0

我有赢得表单,它代表简单的wcf客户端应用程序。该客户端通过http使用wcf服务。在单独的线程上使用wcf服务

内部形式有loadingLabel.Text属性,我想显示加载...文本。当wcf服务返回数据时,应该填充其他属性labelAllBooksNr.Text

服务将返回allBooksNumber属性中的整数。

private void Form1_Load(object sender, EventArgs e) 
{ 
    int allBooksNumber = BookAgent.CountAllBooks();   
} 

因为我没有使用线程我要求的人提供我应该遵循的最佳模式的经验。

回答

1

您可以用最好的方式是BackgroundWorker的是一个单独的线程执行的操作,并提供了许多方法

从MSDN

当你想要一个负责任的UI和你面对与此类操作相关联的长时间延迟 ,BackgroundWorker类提供了一个方便的解决方案 。

namespace WindowsFormsApplication1 

    { 
    public partial class Form1 : Form 
    { 
     public Form1() 
    { 
     InitializeComponent();   
    } 

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) 
    { 
     int allBooksNumber = BookAgent.CountAllBooks(); 
     e.Result = allBooksNumber; 
    } 



    private void button1_Click(object sender, EventArgs e) 
    { 
     backgroundWorker1.RunWorkerAsync(); 
     label1.Text = "Loading...."; 
    } 

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
    { 
     label1.Text = e.Result.ToString; 
    } 
} 

}”

希望这有助于