• 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还有一个提示窗,暂时下忘记了,如果想起来的话,再加上吧~

  • 相关阅读:
    双系统安装,引导被覆盖-如何解决?
    关于apue.3e中apue.h的使用
    UML类图关系
    设计模式的原则
    插入排序Insertion Sort
    Xcode intellisense meaning of letters in colored boxes like f,T,C,M,P,C,K,# etc
    asp.net mvc 页面内容呈现Html.Raw HtmlString
    sqlserver通过设计器修改表结构保存时提示:保存到文本问题
    在windows下使用Cygwin模拟unix环境,并安装apt-cyg,svn等工具
    vs2015插件推荐 Productivity Power Tools 2015
  • 原文地址:https://www.cnblogs.com/shadow-fei/p/4596313.html
Copyright © 2020-2023  润新知