多线程中控制winform的控件!

http://profile.csdn.net/admin/EditUserTage.aspx

不知道大家遇到过这样的问题没有,winform中,有主线程创建了控件,然后创建子线程去处理一些事情,往往

会在子线程中去控制控件,如textbox的值!

在这里,事情就发生了!例如,我们给textbox复制的时候,会有意向不到的结果,给tabpage聚焦的时候,也会有一些事情发生!

究其原因,是在不同的线程中操作的原因!
下面是一个解决方法,仅供参考:

using System;
using System.Text;
using System.Windows.Forms;

namespace MyTest{
 /// <summary>
 /// 解决子线程调用父线程的问题
 /// </summary>
 public class ChangeControlInThread
 {
  public ChangeControlInThread()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  //在新的线程里面修改主线程里的控件的数值

        /// <summary>
        /// 修改textbox的值
        /// </summary>
        /// <param name="tb">yourTextBox</param>
        /// <param name="_Value">修改成的值</param>
  public void Change_TextBox_Value(TextBox tb,string _Value)
  {
             ChangeTB_Err_Value(tb,_Value);

  }

  delegate void CHANGETB_ERR_VALUE(object sender, string text);

  private void  ChangeTB_Err_Value(object sender, string text)
  {
   TextBox tb = sender as TextBox;
   if (tb == null) return;
   //如果是在控件线程外的创建,则调用委托
   if (tb.InvokeRequired)
   {
    CHANGETB_ERR_VALUE anc = new CHANGETB_ERR_VALUE(ChangeTB_Err_Value);
    tb.Invoke(anc, new object[] {sender, text });
   }
   else
   {
    tb.Text = text;
   }

  }

        /// <summary>
        /// 设置TabControl中的TabPage的当前选项卡
        /// </summary>
        /// <param name="tc">yourTabControl</param>
        /// <param name="tp">yourTabPage</param>
  public void Select_TabPage(TabControl tc,TabPage tp)
  {
   ShowTabPage(tc,tp);

  }

  delegate void SHOWTABPAGE(TabControl tc,TabPage tp);

  private void ShowTabPage(TabControl tc,TabPage tp)
  {
   if (tc==null||tp==null)
   {
    return;
   }

   if (tc.InvokeRequired)
   {
                SHOWTABPAGE anc=new SHOWTABPAGE(ShowTabPage);
    tc.Invoke(anc,new Object[]{tc,tp});
   }
   else
   {
    tc.SelectedTab=tp;
   }
  }
 }
}


不知道有没有更好的解决办法!这个方法,已经纳入个人类库

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值