我在学习多线程时遇到以下问题,在当为某自定义类的实例建立新线程时,该线程调用的函数无法对主窗体中的控件进行赋值。
跪求各位高人指点...Class Form1 dim a as new mClass Public sub btnA_Onclick(byval sender.....) '点击按钮 dim t as new thread(addressof a.CallInvoke)
t.start() end sub '完成点击按钮end ClassClass mClass
public sub CallInvoke() do while not form1.isHandleCreated loop form1.text1.beginInvoke(new EventHandle(Addressof SetForm1Property),"aaa") end sub public sub SetForm1Property(byval sender as object,byval e as ev....)
form1.text1.test="aaa" end subend class问题是:点击按钮后,为什么修改不了主窗体中text1.text的值。另外,若此句:
form1.text1.beginInvoke(new EventHandle(Addressof SetForm1Property),"aaa")前无
do while not form1.isHandleCreatedloop经常报错:“在创建窗口句柄之前,不能在控件上调用Invoke或BeginInvoke”
跪求各位高人指点...Class Form1 dim a as new mClass Public sub btnA_Onclick(byval sender.....) '点击按钮 dim t as new thread(addressof a.CallInvoke)
t.start() end sub '完成点击按钮end ClassClass mClass
public sub CallInvoke() do while not form1.isHandleCreated loop form1.text1.beginInvoke(new EventHandle(Addressof SetForm1Property),"aaa") end sub public sub SetForm1Property(byval sender as object,byval e as ev....)
form1.text1.test="aaa" end subend class问题是:点击按钮后,为什么修改不了主窗体中text1.text的值。另外,若此句:
form1.text1.beginInvoke(new EventHandle(Addressof SetForm1Property),"aaa")前无
do while not form1.isHandleCreatedloop经常报错:“在创建窗口句柄之前,不能在控件上调用Invoke或BeginInvoke”
这个错误貌似你的窗体还没有调用CreateWindow或者正在CreateWindow之内,或没有调用showWindow()
导致的。
用Msgbox(form1.handle)是不是显示主窗体的。
这行出错么?
如果是,也用invoke包一下来获取值。
此线程不是创建控件的主线程,不能调用的
请问:form1.text1.beginInvoke(),调用此方法的地方既不是当前UI线程,也不是UI类???
Class Form1 dim a as new mClass Public sub btnA_Onclick(byval sender.....) '点击按钮 dim t as new thread(addressof a.CallInvoke)
t.start() end sub '完成点击按钮end ClassClass mClass
dim mForm as form1
public sub new(byval MainForm as form1)
mform=mainForm
end sub
public sub CallInvoke() do while not form1.isHandleCreated loop mform.beginInvoke(new EventHandle(Addressof SetForm1Property),"aaa") end sub public sub SetForm1Property(byval sender as object,byval e as ev....)
form1.text1.test="aaa" end subend class