首页 > 编程知识 正文

c语言中%是什么意思,男生说的c是什么意思

时间:2023-05-06 21:27:22 阅读:59712 作者:2730

以下引用自: c#使用方法invoker解析线程交叉访问控制

net原则上禁止线程交叉访问控制。 由于这可能会导致错误,因此有一种方法可以禁止编译器检查线程交叉访问。 control.checkforillegalcrossthreadcalls=false; 可以访问,但如果不发生错误,则C#无法保证线程交叉访问控制的运行时错误。

使用方法invoker就能解决

看看系统定义和事件之间的区别

publicdelegatevoidmethodinvoker (;

publicdelegatevoideventhandler (对象发送器,EventArgs e );

简而言之:

MethodInvoker是无参数的请求。

EventHandler是带参数的委托

我是这样理解的。 打开新线程threadRun,并请求新线程使用MethodInvoker执行run ()方法这个时候 run() 方法其实是在主线程中执行的) /。 这将避免线程交叉访问控制。 以下是我的测试代码:

privatevoidbutton1_ click (对象发送器,EventArgs e ) thread.current thread.name=' mainthread '; //主线程命名为mainthreadthreadtd=new thread (thread run ); td.Name='ChildThread '; //子线程的名称为ChildThread td.Start (; } private void ChangeText () this.textbox1. text=thread.current thread.name; //TextBox1内容已更改的线程的名称(} private void threadRun ) (messagebox.show ) (thread.currentthread.name ); //弹出对话框,当前正在运行的线程的名称methodinvokerin=new method invoker (changetext ); this.Begininvoke(in;

运行后,单击Button首先显示对话框ChildThread,然后将TextBox1更改为MainThread

然后我的牛角又来了,ChangeText被MethodInvoker插入主线程运行,那么 ChangeText 应该是在 button1_Click 完全结束后才运行吧,测试代码

privatevoidbutton1_ click (对象发送器,EventArgs e ) thread.current thread.name=' mainthread '; //主线程命名为mainthreadthreadtd=new thread (thread run ); td.Name='ChildThread '; //子线程的名称为ChildThread td.Start (; int k=0; //使主线程满转一段时间的for(longI=0; i 1000000000; I ) if(k10000 ) k=0; k=k 5; }messagebox.show('mainthread全速运算刚结束); } private void ChangeText () messagebox.show ) thread.currentthread.name ); 弹出运行ChangeText的线程的名称(} private void threadRun ) (messagebox.show ) (thread.currentthread.name ); //弹出对话框,当前正在运行的线程的名称methodinvokerin=new method invoker (changetext ); this.Begininvoke(in; }

很遗憾,不是我想的那样。 先出ChildThread再出MainThread,最后出MainThread全速运算刚结束

有人能说明一下吗? ? 同一线程也有CPU时间片的概念吗? 我以前听说过线程插入过程,但没听说线程也可以插入吗?

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。