none
c# 怎么让进程之间以这种方式通讯?(WPF

    问题

  • 我做的一个软件本来要开始做下载的部分了,可是我那天晚上睡觉前突然想把下载的部分独立做成一个exe,可是我今天仔细想了一下,我应该怎么让那个exe知道应该做什么?
    我一开始想到了cmd
    我可以直接这样:download.exe url path url path url path(好像看起来有一点乱
    可是这样就有两个问题了
    我突然想让它再下载几个东西怎么办?(他正在下载的情况下
    它下载完怎么告诉我?
    然后我想到了下面这个方法:

      Process p = new Process();
                p.StartInfo.FileName = "download.exe";//其它的属性先不要管吧
                p.Start();
                p.StandardInput.WriteLine("url,path");//给它发送一条指令,让他开始下载
                p.StandardInput.WriteLine("url,path");//我突然又想让他下载其它东西了,我在给它一个指令,让它往列表里面添加一个
         //中间的代码我删掉了
                string s = p.StandardOutput.ReadToEnd();//读取它给我的回复(比如下载完成 下载失败什么的

    这样主程序这边就没什么问题了,可是对面就有问题了
    因为我想要那个分割出去的有UI 所以用了WPF
    可是WPF里面 Console.WriteLine(); 好像没有用,那么我要怎么给主程序反馈信息?
    而且主程序里面的: p.StandardInput.WriteLine("url,path");  我这边要怎么接收到这句呢?

    FAQ

    Q:为什么要这样做?直接做在主程序里面不是就好了吗

    A:因为想把它做成一个独立的小工具,我可以平时直接打开cmd 输个:download XXX.XX path 就可以下载了

    Q:为什么要把它分割出来变成一个小工具?

    A:上次B站几个人在直播build 结束的时候说了一些意见 里面有这样一句:建议多做一点小工具 再去做工具(这句话被我扭曲了的,原话我不记得了

    Q:为什么不用其它的通信方式?

    A:这是我唯一可以想到的最方便调用的办法了,我不想用socket之类的,每次使用还要写一大堆东西.

    ps:不需要考虑效率,反正只传输一点点东西

    ps2:刚刚学C# 很多东西不太了解

    2016年6月22日 20:23

答案

全部回复

  • 进程间通讯要考虑的内容相对多一点,download 启动失败,download 执行任务完成了,通知调用它的进程

    参考以下方式

    http://www.codeproject.com/Tips/627527/Simple-Inter-process-Communication-system-for-NET


    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2016年6月23日 0:12
  • Hi Chawol,

    直接用api吧,sendmessage在进程通讯间很好使的。

    SendMessage function

    系统命令 WM (Constants)

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.



    2016年6月23日 6:28
  • 我知道有很多简单的API可以直接实现进程间的通信,不过我的目的不完全是实现通信就好了.
    这个软件只是我在学习C#的过程中用来练习的?所以我不想用这些API,这些API如果我是真的要好好写东西我会直接使用.
    可是直接用一大堆API来做这样,可是这样就没有什么意义(主要是想在做的过程中学一些东西,多接触一些东西,直接使用一些现成的API会跳过很多东西
    而且我现在很好奇怎么以这种方式通信
    ps:我指的API中不包括一些比较底层的API,而是指一些已经封装(这个词好像用的不太好)好了的 我可以直接拿去用 可以很快就实现一个功能
    2016年6月23日 7:55
  • 我在来问前看过这些通讯方式的,不过我都不太喜欢
    我想要的是实现起来比较难,可是只要做完想再去调用就很简单
    我想了一下只有这种方式调用起来最简单了,直接在cmd打几个字就可以调用了
    可是这种方式我在查了几小时,没有查到几个有用的答案,基本上全是那几个常用的通讯方式
    不是很想用那几个,我比较喜欢这种方式,所以才想来问问看
    2016年6月23日 8:15
  • Hi,

    你不想用socket基本就只能通过api了啊,sendmessage已经是很底层的一个win32 api了,windows系统本身就是通过message来控制系统操作的。

    这两个都不用只能监控内存了,把相应的变化写入内存然后读取指定内存(C++比较擅长这部分,有点像修改器那样)。

    参考资料:

    C#进程间通信--API传递参数(SendMessage)

    进程间通信_共享内存类_C++实现

    Regards,

    Moonlight


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.


    2016年6月24日 8:52