C# winform 跨线程操作winform程序窗体

我在本地系统中已经运行了程序A,然后再次运行程序A我们命名为A1。现在问题来了,我如何在运行A1的时候找到本地系统中已经运行了的程序A,并且在程序A1中实例化调用A程序的... 我在本地系统中已经运行了程序A,然后再次运行程序A我们命名为A1。现在问题来了,我如何在运行A1的时候找到本地系统中已经运行了的程序A,并且在程序A1中实例化调用A程序的一个窗口并打开。求详解代码! 展开
 我来答
Sxzy灬丨小柒
2014-11-11 · TA获得超过623个赞
知道小有建树答主
回答量:1223
采纳率:50%
帮助的人:278万
展开全部

首先你这不是跨线程,而是跨进程,进程之间叫通讯.

你可以用socket,都是本机ip都统一更好操作.这儿挺好做的我就不给你说了.

给你说下判断进程是否在运行

 

doenet2.0 +

C# Code

//true代表在运行,false代表未运行. 
private bool CloseMethod(string exe)
        {
            System.Diagnostics.Process[] myPs;
            myPs = System.Diagnostics.Process.GetProcesses();
            foreach (System.Diagnostics.Process p in myPs)
            {
                if (p.ProcessName.ToLower() == exe.ToLower())
                {
                    try
                    {
                        return true;
                    }
                    catch (Exception eKillProcess)
                    {
                    }
                }
            }
            return false;
        }
追问
大神,我已经判断了是否运行了该程序了。现在我需要是的就是获取到运行的那个程序然后打开那个程序的窗体。你说可以用socket,都是本机ip都统一更好操作。麻烦大神具体点。最好有代码,我是做JAVA的,最近公司才让我做C#,很多都不懂。
追答

哦原来是做Java的牛人,怪不得感觉你的做法怪怪的.

在一台电脑是尽量用一个Exe,多个窗体,用户也感觉不出来到底几个程序还是窗体.

你现在这种跨进程也能做,但属于是把简单的需求改麻烦了.

还是建议你改回到一个exe.

我先给你写一个socket demo

已知 调用端A.exe  被调用端 B.exe

代码有字数限制.已发附件

 

syht2000
高粉答主

2014-11-11 · 关注我不会让你失望
知道大有可为答主
回答量:3万
采纳率:79%
帮助的人:1.4亿
展开全部
你这样做的目的是什么,是为了在不同实例间进行数据通讯还是什么
更多追问追答
追问
我们打算是在A程序运行时,如果用户在次点击A程序,那么就判断A程序是否运行,若已经运行了A程序,那么就打开已经运行了的A的主窗体。并且结束第二次运行程序的所有线程。现在已经实现判断是否已经运行了A程序,并且可以结束第二次运行程序。现在问题是,无法获取到已经运行的A程序并且调用窗体。
追答
你的两次描述不太对,你的需求实际上就是简单的防重复运行,只是在此基础上增加了一个检测原有程序句柄并前置窗口的功能(也就是说程序在启动时,最先检查的就是是否有实例在运行,根本不会涉及到下一步的什么结束之类的),网上这种例子很容易找,比如http://www.bitscn.com/pdb/dotnet/200610/80379.html?jdfwkey=feknh1
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式