winform 如何跨线程访问

 我来答
freeeeeewind
2014-10-27 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1353万
展开全部
//第一步:定义一个委托
public delegate void MyInvoke(bool checked);

private void button_Click(object sender, EventArgs e)
{           
    //第二步:启动一个后台线程
     Thread t = new Thread(new ThreadStart(fun));
     t.IsBackground = true;
     t.Start();
}
//这个是后台线程函数
private void fun()
{
    // SetChecked方法从后台线程访问窗体
     SetChecked(false);
}

private void SetChecked(bool checked)
{
    //第三步:检测是否需要跨线程调用
     if (checkbox.InvokeRequired)
      {
              //需要跨线程
              //第四步:利用委托和Invoke方法实现跨线程调用
             MyInvoke _myInvoke = new MyInvoke(SetChecked);
             this.Invoke(_myInvoke, new object[] { checked });
      }
      else
       {    
               //不需要跨线程
               // 直接存取、修改窗体控件
              this.checkbox.Checked = checked;
        }
}
巨蟹囧rz小朋友
2014-10-28 · 超过85用户采纳过TA的回答
知道小有建树答主
回答量:181
采纳率:0%
帮助的人:122万
展开全部
加一句代码
Control.CheckForIllegalCrossThreadCalls = false;
允许跨线称访问。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2014-10-27
展开全部
用线程和委托
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式