zoukankan      html  css  js  c++  java
  • WPF-提示窗(线程)

    WPF-提示窗(线程)

    再次开始写博客小开头~

    线程的提示窗自我感觉还可以,不过看过好多大牛说线程慎用,好像是线程释放的问题,不过如果就一个线程,应该问题不大,如果有对线程深入理解的大牛可解释一二~

    开始今日随笔~

    首先,新建一个新的窗体RemindWinView,简单加入一个TextBlock,Text=“提示窗 1 号”,主窗体的cs文件里定义线程,并初始化线程,代码如下

     1  #region 线程
     2 
     3         //线程状态
     4         private bool flag;
     5         //定义线程
     6         private Thread TRemind;
     7         //事件
     8         private delegate void ThreadGo();
     9         //是否登录及时提醒(true,初始提醒;false,初始10秒后提醒);
    10         private bool IsRemindInTime = true;
    11 
    12         #endregion
    13 
    14         public MainWindow()
    15         {
    16             InitializeComponent();
    17 
    18             //启动线程
    19             flag = true;
    20             //初始化线程
    21             TRemind = new Thread(new ThreadStart(threadProc));
    22             //线程运行级别
    23             TRemind.Priority = ThreadPriority.Highest;
    24             //线程启动前设置单元状态
    25             TRemind.SetApartmentState(ApartmentState.STA);
    26             //运行线程
    27             TRemind.Start();
    28         }

    定义线程事件

     1  /// <summary>
     2         /// 线程事件
     3         /// </summary>
     4         private void threadProc()
     5         {
     6             while(flag)
     7             {
     8                 if (IsRemindInTime)
     9                 {
    10                     System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadGo(ThreadToGo));
    11                     //立即提醒,每十秒提醒
    12                     int milSeconds = Convert.ToInt32(10) * 1000;
    13                     Thread.Sleep(milSeconds);
    14                 }
    15                 else
    16                 {
    17                     //十秒后开始提醒,每10秒一次
    18                     int milSeconds = Convert.ToInt32(10) * 1000;
    19                     Thread.Sleep(milSeconds);
    20                     System.Windows.Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadGo(ThreadToGo));
    21                 }
    22             }
    23         }

    执行事件

     1 /// <summary>
     2         /// 执行事件
     3         /// </summary>
     4         private void ThreadToGo()
     5         {
     6             if (!IsExistShowView("RemindWinView_name"))
     7             {
     8                 RemindWinView w = new RemindWinView();
     9                 w.Left = System.Windows.SystemParameters.PrimaryScreenWidth - w.Width;
    10                 w.Top = System.Windows.SystemParameters.WorkArea.Height - w.Height;
    11                 w.Show();
    12             }
    13         }

    关闭主窗体后对线程一个释放的事件

     1  /// <summary>
     2         /// 主窗体关闭事件
     3         /// </summary>
     4         /// <param name="sender"></param>
     5         /// <param name="e"></param>
     6         private void Window_Closed(object sender, EventArgs e)
     7         {
     8             //主窗体关闭后,线程停止,否则线程一直在运行
     9             TRemind.Abort();
    10         }

    还有一个判断,判断提示窗是否存在

     1  /// <summary>
     2         /// 检查窗体是否存在
     3         /// </summary>
     4         /// <param name="winName"></param>
     5         /// <returns></returns>
     6         private bool IsExistShowView(string winName)
     7         {
     8             bool isExist = false;
     9 
    10             foreach (Window win in Application.Current.Windows)
    11             {
    12                 if (win.Name == winName)
    13                 {
    14                     isExist = true;
    15                     win.Activate();
    16                     break;
    17                 }
    18             }
    19             return isExist;
    20         }

    我记得WPF还有一个提示窗,暂时下忘记了,如果想起来的话,再加上吧~

  • 相关阅读:
    一些flex、AS开源项目
    WEB日志格式
    【6】.net msmq消息队列实例
    .NET Unity IOC框架使用实例
    【5】.net WCF 简单实例
    【3】.net MVC 使用IPrincipal进行Form登录即权限验证
    【转】.net MVC 生命周期
    【转】.NET 4.5 使用async和await关键字调用异步方法
    WCF:如何将net.tcp协议寄宿到IIS
    .net EF框架 MySql实现实例
  • 原文地址:https://www.cnblogs.com/shadow-fei/p/4596313.html
Copyright © 2011-2022 走看看