线程间操作无效: 从不是创建控件的线程访问它

简介:

转自原文 线程间操作无效: 从不是创建控件的线程访问它.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
using  System;
using  System.Collections.Generic;
using  System.ComponentModel;
using  System.Data;
using  System.Drawing;
using  System.Linq;
using  System.Text;
using  System.Windows.Forms;
using  System.Threading;
 
namespace  LoginIn
{
     public  partial  class  Form1 : Form
     {
         delegate  void  MyDelegate( string  name,  string  code);
         delegate  void  SetTipDelegate( string  tip);
         public  Form1()
         {
             InitializeComponent();
         }
 
         private  void  button1_Click( object  sender, EventArgs e)
         {
             string  name = txtName.Text;
             string  code = txtCode.Text;
             //调用委托,用新线程校验用户名、密码
             MyDelegate myDelegate =  new  MyDelegate(CheckUser);
             myDelegate.BeginInvoke(name, code,  null null );
         }
 
         void  CheckUser( string  name,  string  code)
         {
             Thread.Sleep(2000);
             if  (name ==  "1"  && code ==  "1" )
             {
                 SetTip( "成功" );
             }
             else
             {
                 SetTip( "失败" );
             }
         }
 
         void  SetTip( string  tip)
         {
             //是否调用Invoke方法
             if  (lbTip.InvokeRequired)
             //if(!从创建控件“lbTip”的线程访问它)
             {
                 //调用委托
                 SetTipDelegate myDelegate =  new  SetTipDelegate(SetTip);
                 Invoke(myDelegate, tip);
             }
             else
             {
                 lbTip.Text = tip;
             }
         }
 
         private  void  timer1_Tick( object  sender, EventArgs e)
         {
             button1.Text = DateTime.Now.ToString();
         }
     }
}

2015年8月3日 16:49:27,更新简写版

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
protected  void  button1_Click( object  sender,EventArgs e)
         {
             string  userName = txtName.Text;
             string  userCode = txtCode.Text;
             
             Func< string  , string  , string > d1 = (name, code) =>          
                  (name ==  "1"  && code ==  "1" ) ?  "成功"  "失败" ;                           
                         
             d1.BeginInvoke(userName,userCode,ar=>
                            {
                                string  result= d1.EndInvoke(ar);
                                Action< string > action1=data=>label1.Text=data;
                                Invoke(action1,result);
                            },
                            null );
         }

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。



    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6697736.html,如需转载请自行联系原作者

相关文章
|
缓存 安全 Java
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
【JavaSE专栏78】线程同步,控制多个线程之间的访问顺序和共享资源的安全性
102 0
|
Java 调度
线程的yield操作
线程的yield操作的作用是让出目前正在执行的线程放弃当前的执行,让出CUP权限,使得CPU去执行其他的线程。处于让步状态的JVM层面的线程状态仍然是RUNNABLE状态,但是该线程所对应的操作系统层面的线程从状态上来说会从执行状态编程就绪状态。线程yield时,线程放弃和重占CPU的时间是不确定的,可能是刚刚放弃CPU,马上又获得CPU执行权限,重新开始执行。
71 0
|
8月前
|
消息中间件 Java Kafka
实时计算 Flink版操作报错之Apache Flink中的SplitFetcher线程在读取数据时遇到了未预期的情况,该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
7月前
|
调度
线程操作:锁、条件变量的使用
线程操作:锁、条件变量的使用
40 1
|
8月前
|
Linux 调度
【linux线程(一)】什么是线程?怎样操作线程?
【linux线程(一)】什么是线程?怎样操作线程?
|
8月前
|
Java
【专栏】Java多线程中,锁用于控制共享资源访问,确保数据一致性和正确性,锁是什么意思,有哪些分类?
【4月更文挑战第28天】Java多线程中,锁用于控制共享资源访问,确保数据一致性和正确性。本文探讨锁的概念、作用及分类:乐观锁与悲观锁、自旋锁与适应性自旋锁、公平锁与非公平锁、可重入锁和读写锁。使用锁需注意避免死锁、合理选择锁粒度及性能优化。理解锁有助于提升多线程编程的效率和稳定性。
114 0
|
8月前
|
算法 安全 Unix
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
【C++ 20 信号量 】C++ 线程同步新特性 C++ 20 std::counting_semaphore 信号量的用法 控制对共享资源的并发访问
218 0
|
8月前
|
前端开发 IDE 开发工具
WxPython 4.0.4多线程访问UI
WxPython 4.0.4多线程访问UI
79 0
|
8月前
|
存储 算法 Linux
一起聊聊内核中的线程:操作函数、进程状态、task_struct、举个例子、
一起聊聊内核中的线程:操作函数、进程状态、task_struct、举个例子、
243 0
|
8月前
|
C#
[C#] 如何在子线程中显示编辑控件内容
[C#] 如何在子线程中显示编辑控件内容
60 0