ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

单例-WPF

2022-04-11 14:32:41  阅读:187  来源: 互联网

标签:void timer MainWindow eventArgs 单例 WPF WpfApp public


1.新建WPF项目,然后引用Microsoft.VisualBasic 

2.删除原生的App.xaml,建立WpfApp类,并使该类继承自Application,在该类中实现WPF MainWindow 窗体的创建工作


public class WpfApp:System.Windows.Application
{
private Action<string> SetTime;
private Timer timer = new Timer();
public WpfApp() {
timer.Interval = 1000;
timer.AutoReset = true;
timer.Elapsed += Timer_Elapsed;
timer.Start();
}
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
if (SetTime != null)
{
SetTime(DateTime.Now.ToLongTimeString());
}
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
ShowWindow();

}
public void ShowWindow()
{
MainWindow win = new WpfApp7.MainWindow();
SetTime += win.GetTime;  //向各个窗体广播消息
win.Show();
}
}

3.编写单实例包装类

public class SingleInstanceWrapper:Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
{
private WpfApp app;
public SingleInstanceWrapper()
{
IsSingleInstance = true; //是否允许单实例
}
protected override bool OnStartup(StartupEventArgs eventArgs)
{
// return base.OnStartup(eventArgs);
app = new WpfApp();
app.Run();
return false;
}
protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
{
base.OnStartupNextInstance(eventArgs);
app.ShowWindow();
}
}

4.创建单线程启动类

public class Startup
{
[STAThread]
public static void Main(string[] args) {
SingleInstanceWrapper wrapper = new SingleInstanceWrapper();
wrapper.Run(args);
}
}

5.窗体类实现代码

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
public void GetTime(string time) {
this.Dispatcher.Invoke((Action)delegate {
this.Title = time;
});

}
}

最终效果:

 

 

 

 

标签:void,timer,MainWindow,eventArgs,单例,WPF,WpfApp,public
来源: https://www.cnblogs.com/sundh1981/p/16129878.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有