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

请教一个关于多线程的有关问题

2012-01-06 
请问一个关于多线程的问题我自定义了一个类ApublicclassA{publicstringppsfaf Thread_threadpublicev

请问一个关于多线程的问题
我自定义了一个类A

        public   class   A
        {
                public   string   pp   =   "sfaf ";

                Thread   _thread;

                public   event   EventHandler   OnChanged   =   null;

                private   void   Do()
                {
                        while   (true)
                        {
                                StateChanged();
                               
                                Thread.Sleep(1000);
                        }
                }

                public   void   Start()
                {
                        StateChanged();

                        _thread   =   new   Thread(new   System.Threading.ThreadStart(Do));
                        _thread.Start();
                }

                public   void   Stop()
                {
                        StateChanged();

                        if   (_thread   !=   null)
                                _thread.Abort();
                }
        }

其中使用了事件委托,我在窗体Form里面   这样操作:
                private   void   button2_Click(object   sender,   EventArgs   e)
                {
                        k   =   new   A();
                        k.OnChanged   +=   new   EventHandler(tt);
                        k.Start();

                }

                void   tt(object   obj,   EventArgs   ea)
                {
                        button1.Text   =   k.pp;


                }

程序运行到提示子线程的StateChanged();时就会提示“线程间操作无效:   从不是创建控件“button1”的线程访问它。”   请问怎么解决多线程之间的事件操作问题?

[解决办法]
可以实现楼主想要的效果。

在你的Class A中的构造函数中,加一个参数,如:
private Form mobjForm;
public A(Form owner)
{
mobjForm=owner;
}

然后Do方法中这样写:
void Do()
{
while(true)
{
mobjForm.Invoke(OnChanged,new object[]{this,EventArgs.Empty});
Sleep(1000);
}
}

这样每次有StateChange事件后,在事件中直接调用主线程控件,而不必每次再用Invoke

热点排行