我走过一条守则,使用Begin Invoke某种方式更新标签文本,我发现这奇怪,我无法理解为什么有些人会这样做。
如果我想利用校对来使用户有好的经验,我将在新读物中使用透镜,更新标签。 起始净额。 我为什么会采用以下做法?
如果你可以告诉我,采用这一特殊做法会有什么好处。
public delegate void loadCustomersDelegate();
private delegate void updateLabelDelegate(Label lb, string text);
public void updateLabel(Label lb, string text)
{
lb.Text = text;
}
public void loadCustomerDetails()
{
loadCustomersDelegate del = new loadCustomersDelegate(loadCustomerDetailsAction);
IAsyncResult res = del.BeginInvoke(null, null);
while (!res.IsCompleted)
{
}
}
public void loadCustomerDetailsAction()
{
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblCustomerName, resp.AddressItems[0].ADName.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblAddress1, resp.AddressItems[0].AD1.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblAddress2, resp.AddressItems[0].AD2.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblAddress3, resp.AddressItems[0].AD3.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblAddress4, resp.AddressItems[0].ADCode.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblPCode, resp.AddressItems[0].PCode.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblTelephone, resp.AddressItems[0].Tele.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblFax, resp.AddressItems[0].Fax.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblSLCode, resp.AddressItems[0].SLCode.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblSLBalance, "£" + resp.AddressItems[0].SLBalance.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblSLMonthsOld, resp.AddressItems[0].SLMonthsOld.ToString() });
BeginInvoke(new updateLabelDelegate(updateLabel), new object[] { lblSLCreditRating, "£" + resp.AddressItems[0].SLCreditRating.ToString() });
}
<>Update>
我写了一封信,将这种做法与其他方式进行比较。 在以欺骗方式管理申请时,我发现错误“Invoke或BeginInvoke在“CustDetails”方法中的第一个Begin Invoke”的窗口操作之前不能被控制。 虽然如此,在操作守则时没有发生任何错误。 任何想法?
我的法典如下:
public delegate void UpdateLabelDelegate(Label lb, string text);
public delegate void loadCustomersDelegate();
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
loadCustomersDelegate del = new loadCustomersDelegate(UpdateCustDetails);
IAsyncResult ar = del.BeginInvoke(null, null);
while (!ar.IsCompleted)
{
}
}
public void updateLabel(Label lb, string text)
{
lb.Text = text;
}
public void UpdateCustDetails()
{
BeginInvoke(new UpdateLabelDelegate(updateLabel), new object[] { label1, "Test" });
BeginInvoke(new UpdateLabelDelegate(updateLabel), new object[] { label2, "Test1234" });
BeginInvoke(new UpdateLabelDelegate(updateLabel), new object[] { label3, "Test5678" });
BeginInvoke(new UpdateLabelDelegate(updateLabel), new object[] { label4, "Test0000" });
}
}
Thanks, Abhi.