当前位置: 移动技术网 > IT编程>开发语言>.net > 定时任务 Wpf.Quartz.Demo.2

定时任务 Wpf.Quartz.Demo.2

2019年02月23日  | 移动技术网IT编程  | 我要评论

离婚后报复前夫,新闻中心首页,深圳 宠物

定时任务 wpf.quartz.demo.1已经能运行了,本节开始用wpf搭界面。

准备工作:

1.界面选择mahapp.metro

在app.xaml添加资源

 <application.resources>
        <resourcedictionary>
            <resourcedictionary.mergeddictionaries>
                <resourcedictionary source="pack://application:,,,/mahapps.metro;component/styles/controls.xaml" />
                <resourcedictionary source="pack://application:,,,/mahapps.metro;component/styles/fonts.xaml" />
                <resourcedictionary source="pack://application:,,,/mahapps.metro;component/styles/colors.xaml" />
                <resourcedictionary source="pack://application:,,,/mahapps.metro;component/styles/accents/blue.xaml" />
                <resourcedictionary source="pack://application:,,,/mahapps.metro;component/styles/accents/baselight.xaml" />
                <resourcedictionary>
                    <system:double x:key="windowtitlefontsize">12</system:double>
                    <system:double x:key="normalfontsize">12</system:double>
                    <system:double x:key="contentfontsize">12</system:double>
                    <system:double x:key="flatbuttonfontsize">12</system:double>
                    <system:double x:key="menufontsize">12</system:double>
                    <system:double x:key="contextmenufontsize">12</system:double>
                    <system:double x:key="statusbarfontsize">12</system:double>
                    <system:double x:key="toggleswitchfontsize">12</system:double>
                    <system:double x:key="toggleswitchheaderfontsize">12</system:double>
                    <system:double x:key="uppercasecontentfontsize">12</system:double>
                    <system:double x:key="tabitemfontsize">12</system:double>
                </resourcedictionary>
            </resourcedictionary.mergeddictionaries>
        </resourcedictionary>
    </application.resources>
app.xaml

其中   <system:double x:key="windowtitlefontsize">12</system:double> ...为改变整个app的相关字体大小。

2.添加log4net记录异常

安装log4net。

在app.config内配置log4net

<log4net>
    <!--按日期分割日志文件 一天一个-->
    <appender name="logfileappenderbydate" type="log4net.appender.rollingfileappender">
      <!--是否续写-->
      <param name="appendtofile" value="true" />
      <!--最小锁定模型以允许多个进程可以写入同一个文件-->
      <param name="lockingmodel" value="log4net.appender.fileappender.minimallock" />
      <param name="staticlogfilename" value="true" />
      <!--保存路径-->
      <param name="file" value="log\" />
      <param name="datepattern" value="yyyy-mm-dd.log" />
      <param name="staticlogfilename" value="false" />
      <param name="rollingstyle" value="date" />
      <layout type="log4net.layout.patternlayout">
        <param name="conversionpattern" value="%n-----------------------------------------%n时间:%d %n级别:%level %n类名:%c%n文件:%f 第%l行%n日志内容:%m%n-----------------------------------------%n%n" />
      </layout>
    </appender>
    <root>
      <!--文件形式记录日志-->
      <appender-ref ref="logfileappenderbydate" />
    </root>
  </log4net>
app.config

在app.xaml.cs内添加

using system;
using system.collections.generic;
using system.configuration;
using system.data;
using system.linq;
using system.threading.tasks;
using system.windows;

[assembly: log4net.config.xmlconfigurator(watch = true)]
namespace wpf.quartz
{
    /// <summary>
    /// app.xaml 的交互逻辑
    /// </summary>
    public partial class app : application
    {
        public app()
        {
            appdomain.currentdomain.unhandledexception += currentdomain_unhandledexception;
            application.current.dispatcherunhandledexception += application_dispatcherunhandledexception;
        }

        private static readonly log4net.ilog log = log4net.logmanager.getlogger(system.reflection.methodbase.getcurrentmethod().declaringtype);

        private void application_dispatcherunhandledexception(object sender, system.windows.threading.dispatcherunhandledexceptioneventargs e)
        {
            //记录严重错误 
            log.fatal(e.exception);
            e.handled = true;//使用这一行代码告诉运行时,该异常被处理了,不再作为unhandledexception抛出了。            
        }

        void currentdomain_unhandledexception(object sender, unhandledexceptioneventargs e)
        {
            //记录严重错误                  
            log.fatal(e.exceptionobject);
        }
    }
}
app.xaml.cs

其中  appdomain.currentdomain.unhandledexception += currentdomain_unhandledexception;
         application.current.dispatcherunhandledexception += application_dispatcherunhandledexception;  捕获没有处理的异常,避免程序崩溃。

3.使用mvvm模式,这里不使用mvvmlight,prism等框架,这里写个简单的类viewmodel继承它即可。

using system;
using system.collections.generic;
using system.componentmodel;
using system.linq;
using system.text;
using system.threading.tasks;

namespace wpf.quartz.helper
{
    public class baseviewmodel : inotifypropertychanged
    {
        public event propertychangedeventhandler propertychanged;
        public virtual void onpropertychanged(string propertyname)
        {
            if (propertychanged != null)
            {
                propertychanged(this, new propertychangedeventargs(propertyname));
            }
        }
    }
}
baseviewmodel

4.前台主界面

 

<controls:metrowindow x:class="mywpf.quart.demo.mainwindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:controls="clr-namespace:mahapps.metro.controls;assembly=mahapps.metro"
        xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
        mc:ignorable="d"
        title="quartzdemo" height="600" width="800" windowstartuplocation="centerscreen" >
    <grid>
        <grid.rowdefinitions>
            <rowdefinition height="auto"></rowdefinition>
            <rowdefinition height="*"></rowdefinition>
            <rowdefinition height="auto"></rowdefinition>
            <rowdefinition height="100"></rowdefinition>
        </grid.rowdefinitions>
        <menu background = "{dynamicresource accentcolorbrush}">
            <menuitem header="系统菜单" background="transparent">
                <menuitem header="全部开始" command="{binding meuncommand}" commandparameter="startall"/>
                <menuitem header="全部停止" command="{binding meuncommand}" commandparameter="stopall"/>
            </menuitem>
        </menu>
        <datagrid grid.row="1" x:name="table" autogeneratecolumns="false" canuseraddrows="false" itemssource="{binding taskruns}" selecteditem="{binding selectedrun}" columnwidth="auto">
            <datagrid.contextmenu>
                <contextmenu >
                    <menuitem header="启动" command="{binding jobstartcommand}" 
                              commandparameter="{binding selectedrun}" 
                           />
                    <menuitem header="停止" command="{binding jobstopcommand}" 
                              commandparameter="{binding selectedrun}" 
                             />
                    <menuitem header="重新启动" command="{binding jobrestartcommand}" 
                              commandparameter="{binding selectedrun}" 
                             />
                    <menuitem header="暂停" command="{binding jobpausecommand}"
                              commandparameter="{binding selectedrun}" 
                              />
                    <menuitem header="恢复" command="{binding jobresumecommand}"
                              commandparameter="{binding selectedrun}" 
                             />
                    <menuitem header="手动执行一次" command="{binding jobruncommand}" 
                              commandparameter="{binding selectedrun}" 
                              />
                </contextmenu>
            </datagrid.contextmenu>
            <datagrid.columns>
                <datagridtextcolumn header="编辑" isreadonly="true" binding="{binding isedit}"></datagridtextcolumn>
                <datagridtextcolumn header="名称" isreadonly="true" binding="{binding displayname}"></datagridtextcolumn>
                <datagridtextcolumn header="标识符" isreadonly="true" binding="{binding name}"></datagridtextcolumn>
                <datagridtemplatecolumn header="状态">
                    <datagridtemplatecolumn.celltemplate>
                        <datatemplate>
                            <textblock   verticalalignment="center"/>
                        </datatemplate>
                    </datagridtemplatecolumn.celltemplate>
                </datagridtemplatecolumn>
                <datagridtextcolumn header="描述" isreadonly="true" binding="{binding remark}"></datagridtextcolumn>
                <datagridtemplatecolumn header="执行设置"  width="*">
                    <datagridtemplatecolumn.celltemplate>
                        <datatemplate>
                            <stackpanel orientation="horizontal">
                                <textblock x:name="txt" tooltip="点击设置" verticalalignment="center">                                  
                                    <hyperlink command="{binding datacontext.jobsetcommand, relativesource={relativesource mode=findancestor,ancestortype=window}}" 
                                        commandparameter="{binding }">设置 </hyperlink>
                                    <run text="{binding settingstr}"></run>
                                </textblock>
                            </stackpanel>
                        </datatemplate>
                    </datagridtemplatecolumn.celltemplate>
                </datagridtemplatecolumn>
                <datagridtextcolumn header="开始时间" isreadonly="true" binding="{binding starttime,stringformat=yyyy-mm-dd hh:mm:ss}"></datagridtextcolumn>
                <datagridtextcolumn header="结束时间" isreadonly="true" binding="{binding endtime,stringformat=yyyy-mm-dd hh:mm:ss}"></datagridtextcolumn>
                <datagridtextcolumn header="下次执行时间" isreadonly="true" binding="{binding nextruntime,stringformat=yyyy-mm-dd hh:mm:ss}"></datagridtextcolumn>
                <datagridtemplatecolumn header="详情">
                    <datagridtemplatecolumn.celltemplate>
                        <datatemplate>
                            <stackpanel orientation="horizontal">
                                <textblock x:name="txt" tooltip="点击打开" verticalalignment="center">                                  
                                    <hyperlink command="{binding datacontext.jobdetailcommand, relativesource={relativesource mode=findancestor,ancestortype=window}}" 
                                        commandparameter="{binding }">详情</hyperlink>
                                </textblock>
                            </stackpanel>
                        </datatemplate>
                    </datagridtemplatecolumn.celltemplate>
                </datagridtemplatecolumn>
            </datagrid.columns>
        </datagrid>
        <gridsplitter x:name="gssplitterr" grid.row="2" height="3" background="{dynamicresource accentcolorbrush}" horizontalalignment="stretch" verticalalignment="center" />
        <richtextbox x:name="rtb" grid.row="3" isreadonly="true" verticalscrollbarvisibility="auto">
            <richtextbox.contextmenu>
                <contextmenu>
                    <menuitem header="剪贴" command="applicationcommands.cut"/>                     
                    <menuitem header="复制" command="applicationcommands.copy"/>                                         
                    <menuitem header="粘贴" command="applicationcommands.paste"/>                                          
                </contextmenu>
            </richtextbox.contextmenu>
            <richtextbox.resources>
                <style targettype="{x:type paragraph}">
                    <setter property="margin" value="0"/>
                    <setter property="lineheight" value="20"/>
                </style>
            </richtextbox.resources>
        </richtextbox>
    </grid>
</controls:metrowindow>
mainwindow

好的,至此准备工作已经完成。预计还有两节全部完成。

 

代码下载:https://pan.baidu.com/s/1ri_yango0n0sfc-kyzvwbw

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网