C# 制作指示灯(经典)

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 制作指示灯(经典)相关的知识,希望对你有一定的参考价值。

群友提问:C#中的指示灯怎么做,改变状态有什么好的方法吗?

制作指示灯的方法有很多中:比如:

  1. 通过GDI+绘制自定义LED指示灯控件;

  2. 调用现成的第三方控件库;

  3. 采用label标签,通过改变背景色实现;等等

本文就以第三种方式展开讲解

01

实现效果

02


实现代码

前台代码:

添加两个按钮和一个标签:

<StackPanel>
        <Border BorderBrush="Red"></Border>
        <Button Name="StartBtn" Content="Start"/>
        <Button Name="StopBtn" Content="Stop"/>
        <Label Name="DisplayLbl" Visibility="Binding DisplaySwitch" FontSize="200"
               HorizontalAlignment="Center" VerticalAlignment="Center"
               Content="Binding LabelText" Foreground="Binding ForeColor" />
    </StackPanel>

后台代码:

①安装PropertyChanged.Fody,using PropertyChanged;然后在类前面添加   [AddINotifyPropertyChangedInterface],类中所有属性变更后就会自动通知界面变更;

②通过DisplaySwitch 属性控制指示灯的显示或者隐藏,然后通过界面的start按钮启动指示灯,stop关闭指示灯;

③指示灯背景色的改变通过独立线程控制,跨线程修改UI线程控件属性使用Caliburn.Micro框架下的  Execute.OnUIThread(()=>);实现。

using PropertyChanged;
using System.Threading;
using System.Windows;
using System.Windows.Media;
using Brush = System.Windows.Media.Brush;


namespace Caliburn.Micro.Hello

    [AddINotifyPropertyChangedInterface]
    public class IndicatorLightViewModel : IViewModel
    
        public Visibility DisplaySwitch  get; set;  = Visibility.Hidden;
        public string LabelText  get; set; 


        public Brush ForeColor  get; set; 


        private Thread workTask;
        public IndicatorLightViewModel()
        
            ForeColor = new SolidColorBrush(Color.FromRgb(255, 0, 0));
        
        public void StartBtn()
        
            DisplaySwitch = Visibility.Visible;
            LabelText = "●";
            if (workTask == null || !workTask.IsAlive)
            
                workTask = new Thread(IndicatorLightOperation);//添加线程 
                workTask.IsBackground = true;
                workTask.Start();
            
        
        public void StopBtn()
        
            if (workTask == null || workTask.IsAlive)
            
                workTask.Abort();
            
            DisplaySwitch = Visibility.Hidden;
        


        public void IndicatorLightOperation()
        
            while (true)
            
                Execute.OnUIThread(()=>
                
                    if (((SolidColorBrush)ForeColor).Color.Equals(Color.FromRgb(255, 0, 0)))
                    
                        ForeColor = new SolidColorBrush(Color.FromRgb(0, 255, 0));
                    
                    else
                    
                        ForeColor = new SolidColorBrush(Color.FromRgb(255, 0, 0));
                    
                );
                Thread.Sleep(500);
            


        
    

03


                         其它相关:Brush颜色转换

1、String转换成Color


  Color color = (Color)ColorConverter.ConvertFromString(string);


2、String转换成Brush


   BrushConverter brushConverter = new BrushConverter();
   Brush brush = (Brush)brushConverter.ConvertFromString(string);


3、Color转换成Brush
    Brush brush = new SolidColorBrush(color));
    
 4、Brush转换成Color有两种方法:


(1)先将Brush转成string,再转成Color。


Color color= (Color)ColorConverter.ConvertFromString(brush.ToString());


(2)将Brush转成SolidColorBrush,再取Color。


 Color color= ((SolidColorBrush)CadColor.Background).Color;

以上是关于C# 制作指示灯(经典)的主要内容,如果未能解决你的问题,请参考以下文章

C#重构经典全面汇总

正经学C#_介绍与其编写基础:《c#入门经典》

C# 多线程经典示例 吃苹果

C#一句简单而经典的代码:10 篇热文汇总

c#初学-多线程中lock用法的经典实例

《C#零基础入门之百识百例》(五十五)抽象类 -- 经典猫狗案例