首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

Invoke参数计数不婚配,求大神指导!

2013-10-31 
Invoke参数计数不匹配,求大神指导!!!public delegate void WeiTuoXmlNode(XmlNode s ) //定义委托priva

Invoke参数计数不匹配,求大神指导!!!

public delegate void WeiTuo<XmlNode>(XmlNode s ); //定义委托
        private  WeiTuo<XmlNode> weituo;         //定义委托
……
 private void frmMain_Load(object sender, EventArgs e){
            EQ2008Config.GetSection();
            string strpath = AppDomain.CurrentDomain.BaseDirectory + "\\StationConfig.xml";
            XmlDocument doc = new XmlDocument();//初始化一个xml实例
            doc.Load(strpath);//导入指定的xml文件
            XmlNode no = doc.SelectSingleNode("StationList");//指定一个节点
            XmlNodeList listnode = no.SelectNodes("StationData");  
            ti = new TimerCallback(ShowDataToScreenStation);   
            foreach (XmlNode node in listnode)//遍历所有的stationdata节点
            {
                weituo = new WeiTuo<XmlNode>(Set_labelText);//委托
                StartThread(node);
               
            }}

 public void Set_labelText(XmlNode strText) 
        {
            
            StationData stationData = new StationData(strText);
            //stationData.IsShow = false;
            Program.listStationList.Add(stationData);
            this.flowLayoutPanel1.BackColor = Color.Orange;
            Label lab = new Label();//实例一个label显示
           
            lab.Name = "lab" + stationData.CardFlagID.ToString();
            lab.AutoSize = false;
            lab.Size = new Size(280, 140);
            lab.BorderStyle = BorderStyle.Fixed3D;
            lab.Text = stationData.StatinName;
            lab.Font = new Font("宋体", 11);

            if (stationData.IsShow)
            {
                lab.BackColor = Color.Green;
            }
            if (stationData.IsShow)
            {
                System.Threading.Timer tim = new System.Threading.Timer(ti, stationData.CardFlagID, 0, 10000);
                //超过0秒后,以及此后每隔10秒间隔,都会调用一次由TimerCallback(ShowDataToScreenStation)指定的委托。
                dicThread.Add(stationData.CardFlagID.ToString(), tim);

            }
            this.flowLayoutPanel1.Controls.Add(lab);
        }

 private void Run() 
        {
            Invoke(weituo); //就是这里报错,参数计数不匹配  
        }

        void StartThread(XmlNode x)
        {
           // ParameterizedThreadStart ParStart = new ParameterizedThreadStart(Run);
              ThreadStart threadtest = new ThreadStart(Run);


      Thread threadNew=new Thread(threadtest);      
      threadNew.Start();
            
        }



请求大神给指导指导,小弟是个新手啊! Invoke参数计数不婚配,求大神指导!

Thread th = new Thread(new ThreadStart(()=>{ Run(); }));
public void Run()
{
    this.Invoke(new Action(()=>{ 方法体...}));
}方法体是哪个方法体,是Set_labelText吗?麻烦了。

不明白你这个程序  为什么又是循环foreach 又是System.Threading.Timer 又是线程Thread 
大体上就是在面板上生成一个个label,而一个线程包含一个label,label里的数据就是xml的,所以现在想把xml的值传到线程里的label中,不知道这样说你明白不?

你这个写法不对,你把System.Threading.Timer(多线程定时器)放在循环里面,就是每次循环都创建一个定时器....定义一个线程就够了哇 
object _lock = new object(); 
Thread th = new Thread(){new ThreadStart(()=>{ object(lock(_lock){ foreach(...){ 
读xml,创建lable,AddLable(lable) } })})};th.start();th,isPostBack=true; 
 public void AddLable(Lable l){this.Invoke(new Action(()=>{ 面板上添加lable }))}  
没用VS  可能有点错误  
[解决办法]
改成这样应该没问题了
        void StartThread(XmlNode x)
        {
            new Thread(() => Set_labelText(x)).Start();
        }

        public void Set_labelText(XmlNode strText)
        {
            this.Invoke((Action<XmlNode>)delegate(XmlNode node)
            {
                StationData stationData = new StationData(strText);
                //stationData.IsShow = false;
                Program.listStationList.Add(stationData);
                this.flowLayoutPanel1.BackColor = Color.Orange;
                Label lab = new Label();//实例一个label显示

                lab.Name = "lab" + stationData.CardFlagID.ToString();
                lab.AutoSize = false;
                lab.Size = new Size(280, 140);
                lab.BorderStyle = BorderStyle.Fixed3D;
                lab.Text = stationData.StatinName;
                lab.Font = new Font("宋体", 11);

                if (stationData.IsShow)
                {
                    lab.BackColor = Color.Green;
                }
                if (stationData.IsShow)
                {
                    System.Threading.Timer tim = new System.Threading.Timer(ti, stationData.CardFlagID, 0, 10000);


                    //超过0秒后,以及此后每隔10秒间隔,都会调用一次由TimerCallback(ShowDataToScreenStation)指定的委托。
                    dicThread.Add(stationData.CardFlagID.ToString(), tim);

                }
                this.flowLayoutPanel1.Controls.Add(lab);
            }, strText);
        }

热点排行