首页 新闻 赞助 找找看

C#一个多线程问题,大哥大姐求帮助。。。。。。[

0
[已关闭问题] 关闭于 2011-12-13 18:50

我想在自己创建的线程中对主窗体中的控件属性进行设置: tabControl1.SelectedTab = tabItem8且tabItem8.Visible = true; 能不能实现,可以实现的话该怎么写?小弟先谢过了不胜感激。。。。。。

niesen111的主页 niesen111 | 初学一级 | 园豆:0
提问于:2011-02-28 21:09
< >
分享
所有回答(2)
0

当然是能实现的,这里有两种方式。下面的例子中,在后台现程中操作了一个名为textBox1的控件。

1、使用SynchronizationContext,这是MSDN推荐的方法,详细内容可以参考http://www.cnblogs.com/Kevin-moon/archive/2009/01/13/1374353.html

public Form1()
        {
            InitializeComponent();
            SynchronizationContext context = SynchronizationContext.Current;

            Thread thread = new Thread(new ParameterizedThreadStart(ThreadProc));
            thread.Start(context);

          }

        private void ThreadProc(object stat)
        {
            SynchronizationContext context = stat as SynchronizationContext;
            Random rand = new Random();
            context.Post(UpdateUI, rand.Next(10, 1000));
        }

        private void UpdateUI(object obj)
        {
            this.textBox1.Text = obj.ToString();
        }

2、使用Control.InvokeRequired属性,详细的说明google一下吧:

       delegate void SetTextHandler(string val);
        public Form1()
        {
            InitializeComponent();
            SynchronizationContext context = SynchronizationContext.Current;
            Thread thread1 = new Thread(new ThreadStart(ThreadProc1));
            thread1.Start();
        }

       

private void ThreadProc1()
        {

            Random rand = new Random();
            SetText(rand.NextDouble().ToString());
        }

        private void SetText(string val)
        {
            if (this.textBox1.InvokeRequired)
            {
                SetTextHandler handler = new SetTextHandler(SetText);
                textBox1.Invoke(handler, new object[] { val });

            }
            else
            {
                textBox1.Text = val;
            }
        }

SharpDeveloper | 园豆:227 (菜鸟二级) | 2011-02-28 22:47
0

用内置的委托也可以实现吧!

                this.Invoke((ThreadStart)delegate
                {
                    tabControl1.SelectedTab = tabItem8              

                });

马战鹏 | 园豆:432 (菜鸟二级) | 2011-03-02 15:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册