9Neung.com เว็บไอทีสบายๆ สไตล์นายหนึ่ง

3Nov/090

วิธีการทำ Single-Instance Applications

1.problem-multiple-app
โดยปกติเมื่อเราสร้าง Windows Application หรือ WPF Application ผู้ใช้จะสามารถเปิด 1 โปรแกรมได้หลายหน้าต่างดังรูปด้านบน ซึ่งดูแล้วไม่ make sense เท่าที่ควรจะเป็น หรือในอีกแง่หนึ่งเมื่อเราทำแบบนี้โปรแกรมอาจมีปัญหาได้โดย

เฉพาะอย่างยิ่งโปรแกรมทีมีการโหลดข้อมูลไฟล์จากที่เดียวกัน

ตัวอย่างเช่น เราต้องการสร้าง Application ที่เปิดได้เพียงหน้าต่างเดียวแบบที่ Microsoft Word ทำเราควรทำอย่างไร

WPF ไม่ได้ provide วิธีการทำ Single-Instance applications ไว้ แต่เราทำได้หลายวิธี
วิธีนี้เป็นวิธีหนึ่งที่จะเสนอจะเป็นการสร้าง startup application มาใหม่
โดยหลักการเรียก Application ของ WPF จะเป็นดังรูป
2.Open-WPF-Application

วิธีการทำ
1. add reference ของ Microsoft.VisualBasic.dll เข้ามาที่ Project
3.Add-Reference-Visual-Basic

2. แก้ไข Class ของ App

public partial class App : Application
{

protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);

//Load Main Windows
Window1 win = new Window1();
this.MainWindow = win;
win.Show();

if (e.Args.Length > 0)
ShowDocument();
}

public void ShowDocument()
{
MessageBox.Show("Application's already running");
}
}

3. สร้าง Class SingleInstanceApplicationWrapper ซึ่งเป็นตัวเก็บ Application ของเราก่อนที่จะ Run และทำการ เรียก Object ของ App

public class SingleInstanceApplicationWrapper : Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase
{
public SingleInstanceApplicationWrapper()
{
//Enable Single-Instance mode.
this.IsSingleInstance = true;

}

//Create the WPF application class
public App app;
protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs eventArgs)
{
app = new App();
app.Run();
return false;
}

//Direct multiple instances.
protected override void OnStartupNextInstance(Microsoft.VisualBasic.ApplicationServices.StartupNextInstanceEventArgs eventArgs)
{
if (app.MainWindow != null)
app.ShowDocument();
if (eventArgs.CommandLine.Count > 0)
{
app.ShowDocument();
}
}
}

4. สร้าง Statup Class ไปเรียก Object ของ SingleInstanceApplicationWrapper

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

5.ไปที่ Properties ของ Project จากนั้นเลือกที่ Application > Startup Object : > WPFSingleInstance.Startup
4.Startup-Application

ผลลัพท์ :
5.Alert-When-have-more-than-application

Download : WPFSingleInstance - 9Neung.com.zip
Password : 9Neung.com

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment


No trackbacks yet.

SEO Powered by Platinum SEO from Techblissonline