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

C# 跨线程操作有关问题

2013-02-28 
C# 跨线程操作问题我现在写了一个c#的winform程序,后台有一个线程在监听局域网中的信息,收到信息后要在主

C# 跨线程操作问题
我现在写了一个c#的winform程序,后台有一个线程在监听局域网中的信息,收到信息后要在主窗体中动态创建一个自定义组件,但是建了组件之后我点击组件进行操作就出错,因为不是主线程创建的组件,所以不能操作。。。求大神指导 C#跨线程操作? C#??线程间通信
[解决办法]
用Control.Invoke,把创建界面的代码用委托写好了让UI线程调用。
[解决办法]
我这有个例子,希望对你有帮助


   //首先声明一个委托
    delegate void ShowMethod(object o);
    ShowMethod s;

    
    public Form1()
    {
       s=new ShowMethod(OperateCom);
        //声明新的线程并调用方法
       Thread newThread = new Thread(ThreadOperate);
       newThread.Start();
    }
    
    private void ThreadOperate()
    {
        this.Invoke(s, new object[] { "操作" });
    }

     private void OperateCom(object o)
     {
         Button btn1 = new Button();
         btn1.Text = o.ToString();
         btn1.Name = "btnOperate";
         btn1.Click+=new EventHandler(btn1_Click);
         this.Controls.Add(btn1);
     }


     private void btn1_Click(object sender, EventArgs e)
     {
         MessageBox.Show("谢谢");
     }

[解决办法]
你在定义委托处理的方法里增加组件就可以了。
那就是主线程里添加的。
[解决办法]
两种方法 :
一种是用委托,这个上面的也说了
还有一种是在监听线程里的开头加这一句 CheckForIllegalCrossThreadCalls = false;
这个方法不安全,不如委托,不过也可以解决问题

热点排行