请教:多线程问题,如何让【子线程】访问【主线程】建立的【控件】?

问题描述

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另起新行复制粘贴到代码里。启动线程写在你的触发事件那里。

非常感谢!试用中!.....

时间: 2024-11-05 14:43:58

请教:多线程问题,如何让【子线程】访问【主线程】建立的【控件】?的相关文章

子线程和主线程业务依次执行循环50次

子线程业务:循环10次 主线程业务:循环20次 这两个循环(业务)需要交替执行共50次 要用到共同数据的(包括同步锁)或共同算法(加密解密)的若干个方法应该归在同一个类上,这种设计正好体现了高内聚和程序的健壮性  while (bShouldSub) {                 try {                     this.wait();                 } catch (InterruptedException e) {                 

C# Winform 子窗体访问父级窗体的控件和属性_C#教程

今天在做一个联系人管理的C#设计时,遇到了这个问题,我需要将父窗体中的textBox中的值传到子窗体并进行数据库查询操作,我用了new 父窗体().textBox.text;来进行值传递,然而并无卵用,经过多次试验,找到了一个比较简单的解决方法: 一.子窗体调用父窗体的静态变量 父窗体:Logout 子窗体:Affirm 父窗体文本框:tB_Logout_Username public partial class Logout : Form { //定义一个静态变量存放父窗体中的文本框的值 pu

c#如何通过子线程控制主线程控件呢?

问题描述 c#如何通过子线程控制主线程控件呢? 我主窗口有个webbrowser控件,想通过子线程点击已显示出来的网页实现填写的功能,要怎么实现呢?我直接写代码会出错: 求大神贴点代码! 我用主线程弄个按钮是可以点击的,就是子线程不行 错误信息: "System.InvalidCastException"类型的未经处理的异常在 System.Windows.Forms.dll 中发生 其他信息: 指定的转换无效. 线程代码 HtmlElement ht = webBrowser1.Do

安卓,子线程获取网络图片,发消息给主线程,主线程用图片填充listview,出错

问题描述 安卓,子线程获取网络图片,发消息给主线程,主线程用图片填充listview,出错 先上logcat: 我的xml布局就是一个按钮,和一个listview,listview里就一个imageview,按下按钮开始从网络获取图片,然后发消息到主线程,然后listview就填充数据.xml代码就不贴了. 以下是mainactivity public class MainActivity extends AppCompatActivity implements View.OnClickList

编码-C#中线程里调用winform上的控件,问题。求助。

问题描述 C#中线程里调用winform上的控件,问题.求助. 废话不多说,我直接贴代码了.程序很简单.我摘抄的网上的. 上图是个界面. 然后程序里先是一个类.如下: class ClientThread { Encoding encoding = Encoding.GetEncoding("GB2312"); private Socket client; public string data = null; private byte[] receiveBytes = new byte

qtabwidget用法-Qt中TabWidget怎么在代码里面实现tab页之间的切换,并且分别访问到每个页面的控件?

问题描述 Qt中TabWidget怎么在代码里面实现tab页之间的切换,并且分别访问到每个页面的控件? Qt中TabWidget怎么在代码里面实现tab页之间的切换,并且分别访问到每个页面的控件? 解决方案 实现切换可以用控件的setCurrentIndex方法 ui->tabWidget_update_time->setCurrentIndex(1); //这个是切换到第二页,因为index是从0开始的 至于访问每个页面的控件,如果楼主的控件是代码生成的话(假设是new出来的),那直接用对应

WPF Frame做导航的时候 在子页面怎么获取父窗口的控件

问题描述 RTWPFFrame做导航的时候在子页面怎么获取父窗口的控件?比如<FrameDockPanel.Dock="Top"x:Name="MainFrame"NavigationUIVisibility="Hidden"Source="Welcome.xaml"/> 在Welcome.xaml页面里面怎么获取父窗口的控件并且定义事件? 解决方案 解决方案二:自己顶!!!!!解决方案三:没人来?自己顶!解决方案

[导入]在自定义WebUserControl中访问PAGE/master/或其它控件中的对象

在自定义WebUserControl中访问PAGE/master/或其它控件中的对象文章来源:http://blog.csdn.net/chsword/archive/2006/12/25/1461165.aspx

多线程-linux下,子线程如何通过pthread_kill向主线程发送信号?

问题描述 linux下,子线程如何通过pthread_kill向主线程发送信号? //如下代码 #include <stdio.h> #include <signal.h> #include <pthread.h> void signal_deal(int sig); void* fun(); pthread_t pt_main; int main(int argc, char* argv[]) { pthread_t pt; //pt_main = getpid();

多线程-c#如何在子线程中获取form主线程中按钮点击事件

问题描述 c#如何在子线程中获取form主线程中按钮点击事件 如何在子线程中获取form主线程中按钮点击事件,子线程B中定义了一个新类classnew,获取点击事件也是在新类classnew中,并且获取完点击事件以后执行此类中下边的任务. 解决方案 你可以主线程中得到点击事件后,发送一个Event事件通知等告诉子线程,然后子线程就可以进行后面的任务处理 解决方案二: 不知道你说的获取事件是什么意思,是事件挂钩还是获得挂钩的事件处理函数的委托.请你说清楚. 解决方案三: 主线程中得到点击事件后,发