CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

打开C#应用程序的问题

楼主tomtown530(梦想一定会实现!)2006-03-11 14:09:32 在 .NET技术 / C# 提问

写了一个应用程序,现在的情况是这样,如果这个应用程序已经打开了,我再次打开这个程序就会再次打开第二个,这样很占资源。  
  我想如何才能让程序在打开的时候不再创建新的应用程序,而是关闭前一个或者就是前一个的基础上重新加载资源使前一个程序成为新打开的应用程序呢?  
  请高手指教,谢谢啊! 问题点数:50、回复次数:2Top

1 楼singlepine(小山)回复于 2006-03-11 14:18:03 得分 30

参考,转成c#代码  
  http://www.5ivb.net/Info/83/Info30209/Top

2 楼zhzuo(秋枫)回复于 2006-03-12 21:58:44 得分 20

我使用的方式,  
  ApplicationStart.cs   文件  
  =========================================  
  using   System;  
  using   System.Diagnostics;  
  using   System.Windows.Forms;  
  using   System.Reflection;  
  using   System.Runtime.InteropServices;  
   
  using   Zhzuo.WinGui;  
   
  namespace   Zhzuo  
  {  
  ///   <summary>  
  ///   AppStart   的摘要说明。  
  ///   </summary>  
  public   class   ApplicationStart  
  {  
  private   const   int   WS_SHOWNORMAL   =   1;  
  [DllImport("User32.dll")]  
  private   static   extern   bool   ShowWindowAsync(IntPtr   hWnd,   int   cmdShow);  
  [DllImport("User32.dll")]    
  private   static   extern   bool   SetForegroundWindow(IntPtr   hWnd);  
   
  ///   <summary>  
  ///   应用程序的主入口点。  
  ///   </summary>  
  [STAThread]  
  static   void   Main()    
  {  
  Process   instance   =   GetRunningInstance();  
  if(instance   ==   null)  
  {  
  //初始化程序配置信息  
  //ApplicationSettings.Initialize();  
  Application.Run(new   MainForm());  
  }  
  else  
  {  
  HandleRunningInstance(instance);  
  }  
  }  
  ///   <summary>  
  ///   获取应用程序的实例,没有其它的例程,返回Null  
  ///   </summary>  
  ///   <returns></returns>  
  public   static   Process   GetRunningInstance()  
  {  
  Process   current   =   Process.GetCurrentProcess();  
  Process[]   processes   =   Process.GetProcessesByName(current.ProcessName);  
  //遍历正在有相同名字运行的例程  
  foreach   (Process   process   in   processes)  
  {  
  //忽略现有的例程  
  if   (process.Id   !=   current.Id)  
  //确保例程从EXE文件运行  
  if   (Assembly.GetExecutingAssembly().Location.Replace("/",   "\\")   ==   current.MainModule.FileName)  
  //返回另一个例程实例  
  return   process;  
  }  
  return   null;  
  }  
  ///   <summary>  
  ///   获取窗口句柄  
  ///   </summary>  
  ///   <param   name="instance"></param>  
  public   static   void   HandleRunningInstance(Process   instance)  
  {  
  //确保窗口没有被最小化或最大化  
  ShowWindowAsync   (instance.MainWindowHandle   ,   WS_SHOWNORMAL);  
  //设置真实例程为foreground   window  
  SetForegroundWindow   (instance.MainWindowHandle);  
  }  
  }  
  }Top

相关问题

  • C#应用程序中,如何打开网站连接如:www.QF88.com
  • 打开应用程序慢
  • 打开其他的应用程序
  • 用api打开应用程序
  • 有没有大虾指点小第, C#中实现打开一个应用程序的类是哪一个?
  • 有没有大虾指点小第, C#中实现打开一个应用程序的类是哪一个?
  • 如何在C#.NET中打开并运行一个客户端的应用程序?
  • 关于C/S应用程序的问题?
  • c#编桌面应用程序如何?
  • 用C++Builder开发DirectX应用程序

关键词

  • 应用程序
  • null
  • 例程
  • 打开
  • process
  • 程序
  • instance
  • current
  • static
  • private

得分解答快速导航

  • 帖主:tomtown530
  • singlepine
  • zhzuo

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo