问题描述
A窗体建立的控件,需要用多线程,同时给各个控件加载数据。(从服务器上下载数据,由于延时问题,希望并行加载数据。)现在只线程出现错误:【线程间操作无效:从不是创建“XXXX”的线程访问它】救解决方法?
解决方案
解决方案二:
你没代码,只能猜测你不是按这个文章里面的做法做的
解决方案三:
一般就写this.Invoke(()=>{//跨线程的代码});
解决方案四:
Dispatcher.Invoke(Sub()'DoSomethingEndSub)参见https://msdn.microsoft.com/zh-cn/library/system.windows.threading.dispatcher.aspx
解决方案五:
关键词:invoke,delegate
解决方案六:
其实你直接百度这个错误,会有很多相关资料的呀
解决方案七:
UI的控件只能UI线程访问,如果要获取数据,就用后台线程去获取,数据获取到后,用UI线程去把数据绑定到控件。把UI线程的SynchronizationContext.Current对象保存到你的后台访问类中,等数据回来后调用ctx.Post方法把后续操作的方法post到ui线程上。去msdn上搜索SynchronizationContext,你会得到更多信息。
解决方案八:
委托比如建个方法PrivateSuba()form1.textbox.text="我很帅"endsub再建个委托PrivateSubwt()DimwAsNewMethodInvoker(AddressOfa)BeginInvoke(w)endsub启动线程DimtAsNewThreading.Thread(AddressOfwt)t.start
解决方案九:
引用7楼notbb的回复:
委托比如建个方法PrivateSuba()form1.textbox.text="我很帅"endsub再建个委托PrivateSubwt()DimwAsNewMethodInvoker(AddressOfa)BeginInvoke(w)endsub启动线程DimtAsNewThreading.Thread(AddressOfwt)t.start
非常感谢!请教三个SUB写在什么位置?
解决方案十:
引用7楼notbb的回复:
委托比如建个方法PrivateSuba()form1.textbox.text="我很帅"endsub再建个委托PrivateSubwt()DimwAsNewMethodInvoker(AddressOfa)BeginInvoke(w)endsub启动线程DimtAsNewThreading.Thread(AddressOfwt)t.start
这个最全面
解决方案十一:
引用8楼litao_fox的回复:
Quote: 引用7楼notbb的回复:
委托比如建个方法PrivateSuba()form1.textbox.text="我很帅"endsub再建个委托PrivateSubwt()DimwAsNewMethodInvoker(AddressOfa)BeginInvoke(w)endsub启动线程DimtAsNewThreading.Thread(AddressOfwt)t.start非常感谢!请教三个SUB写在什么位置?
前面两个sub另起新行复制粘贴到代码里。启动线程写在你的触发事件那里。
解决方案十二:
引用10楼notbb的回复:
Quote: 引用8楼litao_fox的回复:
Quote: 引用7楼notbb的回复:
委托比如建个方法PrivateSuba()form1.textbox.text="我很帅"endsub再建个委托PrivateSubwt()DimwAsNewMethodInvoker(AddressOfa)BeginInvoke(w)endsub启动线程DimtAsNewThreading.Thread(AddressOfwt)t.start非常感谢!请教三个SUB写在什么位置?
前面两个sub另起新行复制粘贴到代码里。启动线程写在你的触发事件那里。
非常感谢!试用中!.....