none
变量改变时如何引发一个事件 RRS feed

  • 问题

  • 比如说我有一个整形变量 count 当count值发生改变时,会引发一个事件,这个事件的功能是在一个Label控件中显示count当前值,请问如何操作,用timer控件检查count值的方法我已想到但是不理想,请问还有别的方法吗?

    myriceme

    2014年9月13日 13:42

答案

  • 你可以试试委托和事件啊。

    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Linq
    Imports System.Text
    Imports System.Threading.Tasks
    Imports System.Windows.Forms
    
    Namespace Vairable_AND_Event
    	Public Class ValueChageEventArgs
    		Public Sub New(s As String)
    			Text = s
    		End Sub
    		Public Property Text() As [String]
    			Get
    				Return m_Text
    			End Get
    			Private Set
    				m_Text = Value
    			End Set
    		End Property
    		Private m_Text As [String]
    		' readonly
    	End Class
    
    	Public Partial Class Form1
    		Inherits Form
    		Public Delegate Sub ValueChageEventHandler(e As ValueChageEventArgs)
    
    		Public Event ValueChanged As ValueChageEventHandler
    		Private _test As String
    		Public Property Test() As String
    			Get
    				Return _test
    			End Get
    
    			Set
    
    				'在对变量设置值的时候调用时间。
    
    				RaiseEvent ValueChanged(New ValueChageEventArgs(value))
    				_test = value
    			End Set
    		End Property
    
    		Public Sub New()
    
    			InitializeComponent()
    
    			'绑定事件
    
    			AddHandler ValueChanged, AddressOf Form1_ValueChanged
    		End Sub
    
    		Private Sub Form1_ValueChanged(e As ValueChageEventArgs)
    
    
    			'当变量值更新时更新label的值。
    
    			label1.Text = e.Text
    		End Sub
    
    		Private Sub button1_Click(sender As Object, e As EventArgs)
    
    
    			'使用random产生随机数,为测试用的变量赋值。
    
    			Test = New Random().[Next]().ToString()
    		End Sub
    	End Class
    End Namespace
    2014年9月13日 21:02

全部回复

  • 你可以试试委托和事件啊。

    Imports System.Collections.Generic
    Imports System.ComponentModel
    Imports System.Data
    Imports System.Drawing
    Imports System.Linq
    Imports System.Text
    Imports System.Threading.Tasks
    Imports System.Windows.Forms
    
    Namespace Vairable_AND_Event
    	Public Class ValueChageEventArgs
    		Public Sub New(s As String)
    			Text = s
    		End Sub
    		Public Property Text() As [String]
    			Get
    				Return m_Text
    			End Get
    			Private Set
    				m_Text = Value
    			End Set
    		End Property
    		Private m_Text As [String]
    		' readonly
    	End Class
    
    	Public Partial Class Form1
    		Inherits Form
    		Public Delegate Sub ValueChageEventHandler(e As ValueChageEventArgs)
    
    		Public Event ValueChanged As ValueChageEventHandler
    		Private _test As String
    		Public Property Test() As String
    			Get
    				Return _test
    			End Get
    
    			Set
    
    				'在对变量设置值的时候调用时间。
    
    				RaiseEvent ValueChanged(New ValueChageEventArgs(value))
    				_test = value
    			End Set
    		End Property
    
    		Public Sub New()
    
    			InitializeComponent()
    
    			'绑定事件
    
    			AddHandler ValueChanged, AddressOf Form1_ValueChanged
    		End Sub
    
    		Private Sub Form1_ValueChanged(e As ValueChageEventArgs)
    
    
    			'当变量值更新时更新label的值。
    
    			label1.Text = e.Text
    		End Sub
    
    		Private Sub button1_Click(sender As Object, e As EventArgs)
    
    
    			'使用random产生随机数,为测试用的变量赋值。
    
    			Test = New Random().[Next]().ToString()
    		End Sub
    	End Class
    End Namespace
    2014年9月13日 21:02
  • 比如说我有一个整形变量 count 当count值发生改变时,会引发一个事件,这个事件的功能是在一个Label控件中显示count当前值,请问如何操作,用timer控件检查count值的方法我已想到但是不理想,请问还有别的方法吗?

    myriceme

    你的count是单线程还是多线程更新的?如果是多线程(一个线程专门负责修改,一个线程专门监视)建议考虑:

    1)volitale关键字。

    2)AutoResetEvent(信号量)。

    如果和主线程交互,注意线程引发事件必须使用SynchronizedContext.Post/Send方法触发,否则会发生“无法在不是该线程创建的控件上访问该控件”的错误。


    ASP.NET Forum
    Other Discussion Forums
    FreeRice Donate
    Issues to report
    Free Tech Books Search and Download

    2014年9月16日 2:54
    版主