c#如何跨线程调用窗体控件

 我来答
freeeeeewind
推荐于2016-05-09 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1352万
展开全部

要从其他跨线程存取调用控件,可采用以下两种方法之一:

方法1)不进行线程安全的检查

方法2)通过委托的方式

代码如下所示

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //方法1:不进行跨线程安全检查
            //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
        }
  
        private void button1_Click(object sender, EventArgs e)
        {
            Thread th1 = new Thread(new ThreadStart(CalNum));
            th1.Start();
        }
  
        private void CalNum()
        {
            //button1.Enabled = false;
  
            int result = 0;
            for (int i = 1; i < 100000000; i++)
            {
                result += i;
            }
  
            SetCalResult(result);
  
            //button1.Enabled = true;
        }
  
        //方法2:检查是否跨线程,然后将方法加入委托,调用委托
        public delegate void SetTextHandler(int result);
        private void SetCalResult(int result)
        {
            if (label2.InvokeRequired == true)
            {
                SetTextHandler set = new SetTextHandler(SetCalResult);//委托的方法参数应和SetCalResult一致
                label2.Invoke(set, new object[] { result }); //此方法第二参数用于传入方法,代替形参result
            }
            else
            {
                label2.Text = result.ToString();
            }
        }
    }
创作者zUzVB1Sl31
2019-08-24 · 编程类资料、英语学习资料
创作者zUzVB1Sl31
采纳数:1331 获赞数:5975

向TA提问 私信TA
展开全部
如果你面临无数的控件和控件组,我看你怎么玩下去。所以在C#中我们经常讲的线程安全,意义就在这里,你要学会把这些东西缓存在内存中,而不是让程序去不断的invoke才是程序的关键所在。你不要天真的以为invoke一定是安全的,也不要天真的认为invoke不是事件,他也在运行。在使用多线程的时候我们完全可以把变量定义为全局变量。android studio这一点就比C#机制做得好,不会这么紊乱至少。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jqkalytrue
2014-03-04 · TA获得超过835个赞
知道小有建树答主
回答量:1509
采纳率:57%
帮助的人:380万
展开全部
Invoke方法吧,不进行线程安全的检查不好
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
gytangyao
推荐于2018-04-09 · 超过31用户采纳过TA的回答
知道答主
回答量:62
采纳率:0%
帮助的人:78.2万
展开全部
new Action(delegate{

ListBox.Invoke(new Action(delegate{
ListBox.Item.Add("hello!")
}));

}).BingInvoke(null,null);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式