小弟最近做一个WinForm程序.在程序中必须调用一个异步方法,在异步方法的回调中需要
改变主界面的一个Label值,在异步回调中如果直接改Label值它是不容许你改的,我在网
上查了下,发现用这个方法可以改主界面的Lable值
private void RefushClientList()
{
lock(this)
{
object[] pList = { this, System.EventArgs.Empty };
this.treeList.BeginInvoke(new System.EventHandler(UpdateTree), pList);
}
}
但是在我程序里面改变Label的值是需要做为参数传递给UpdateTree方法的,我试着创建
一个新的委托和派生System.EventArgs类,让它派生的类多加一个属性然后传递参数到
UPdateTree方法里面去,程序编译没有错误,但是当我程序调用这个窗体的时候报错,错误
为:未能在给定的程序集中找到任何适合于指定的区域性(或非特定区域性)的资源,请确
保已将"MCHClientMain.resources"正确嵌入或者链接到程序集"MCHClient".
还请各位高手帮忙让小弟超生谢谢.

解决方案 »

  1.   

    通过下面的例子你应该知道怎么做:
    /// <summary>
    /// 将信息显示到列表框中
    /// </summary>
    /// <param name="msg">信息</param>
    /// <param name="messageTypeP">信息类型</param>
    void ShowMsg(string msg,MessageType messageTypeP)
    {
    ShowMsg(new TransferEventArgs("",msg));
    } /// <summary>
    /// 将信息显示到列表框中,这里是关键的处理方法
    /// </summary>
    /// <param name="msg">信息</param>
    /// <param name="logType">信息类型</param>
    void ShowMsg(TransferEventArgs e)
    {
    if (InvokeRequired)
    {
    object[] pList = { this, e }; // Invoke the method.
    // NB, this class is derived
    // from Form, so we can just call BeginInvoke
    // on ourselves to get to the UI thread.
    BeginInvoke(new TransferEventHandler(ShowMsgToListView),pList);
    } // custom class:
    else
    {
    ShowMsgToListView(this,e);
    }
    } void ShowMsgToListView(object obj,TransferEventArgs e)
    {
    if (lvLog.Items.Count > LogKeepCount * 2)
    {
    int i;
    for (i = lvLog.Items.Count - LogKeepCount; i >= 0 ; --i)
    {
    lvLog.Items.RemoveAt(i);
    }
    }
    string logTypeString = this.GetText(e.MessageType.ToString(),-1);
    string timeString = DateTime.Now.ToString("F") + "." + DateTime.Now.Millisecond.ToString("000");
    ListViewItem lvi = this.lvLog.Items.Add((++msgCount).ToString());
    lvi.SubItems.Add(logTypeString);
    lvi.SubItems.Add(timeString);//yyyy/MM/dd HH:mm:ss"));
    lvi.SubItems.Add(e.ToString());
    lvi.EnsureVisible(); WriteLog(msgCount.ToString() + "\t" + logTypeString + "\t"  + timeString + "\t"  + e.ToString());
    }
      

  2.   

    "让小弟超生"???你那个pList就是用作传参数用的!
      

  3.   

    在异步回调中要改变窗体里面的东西,应该用this.invoke(.....);