日期:2014-05-17  浏览次数:20762 次

C#难题,知识面广的朋友帮忙进来看一下!!
说明:
是这样的,我想做一个窗体程序,并且是一直运行于内存中的,这个窗体程序提供文件转换服务(JPG转TIF)。
但这个窗体自身并不包含业务,而业务逻辑可能在其他N个进程中处理。这些进程处理到需要转换文件的时候,就把文件路径发送到这个窗体程序中,这个窗体程序转换好后,通知发送过来的进程(“已经转换好了”)。然后这个进程继续处理它自己的业务逻辑。(重点提示:这样的业务进程可能有N多条)

-------------------------------------------
问题是:我这个窗体应该用什么技术来提供与其它进程进行通讯呢??
-------------------------------------------
我的思考:我原先想用TCP/IP端口通讯,但觉得在本机运行的程序还要用到网络通讯的方式,有点不合理。然后我想到内存共享,但又不好管理,要写大量正则。接着我想到windows消息队列组件,但依赖于组件,又怕不稳定,而且内部运行机制不透明(并且还要安装)。然后我又想到web service,但它却不能提供UI界面。然后我又想到窗体间的回调函数(目前觉得最好是这个)。

------解决方案--------------------
 大神啊,帮顶一下吧
------解决方案--------------------
没弄过这种的,帮顶一个
------解决方案--------------------
进程间通讯,其实用SendMessage就可以实现,刚找了一下以前做的东西,正好是进程间通讯的,主要是主程序调用校验程序,校验程序返回校验结果。

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace SendMsg
{
    #region 结构体定义
    [StructLayout(LayoutKind.Sequential)]
    public struct COPYDATASTRUCT
    {
        public int dwData;
        public int cbData;
        public int lpData;
    }

    //定义要传递的Struct
    [StructLayout(LayoutKind.Sequential)]
    struct SendMsgInfo
    {
        /// <summary>
        /// 参数(单号)
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 100)]
        public string AccessionNum;
        /// <summary>
        /// 参数(原文)
        /// </summary>
        [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 5000)]
        public string ReportTxt;
        /// <summary>
        /// 参数(Ris用户)
        /// </summary>
        [MarshalAs(UnmanagedType.