WPF 进程间通讯----inter-process communication
进程间通讯--inter-process communication
进程间相互通讯的方法有很多,如用web services,xml 等互相读取, 网络的可以使用socket 等.
2个WinForm程序相互通讯可以使用重写WndProc的方法,而WPF则不能。
先看如图效果:
首先新建一个空白解决方案IPC
新建一个WPF项目命名为AppA
我们只需要点击AppA中的button后AppB会提示已经点击即可,
项目A的窗体XAML代码:
<Window x:Class="IPC.AppA.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="App A" Height="350" Width="525">
<Grid>
<Button Name="btnOK" Content="Button" HorizontalAlignment="Left" Margin="202,135,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>
</Window>
项目A的后置代码:
public partial class MainWindow : Window
{ [DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern bool PostMessage(int hhwnd, uint msg, IntPtr wparam,
IntPtr lparam);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString);
private string msgstr = "inter-process communtcation";
private uint msg;
private const int HWND_BROADCAST = 0xffff; public MainWindow()
{
InitializeComponent();
this.btnOK.Click += (s, e) => {
this.Dispatcher.Invoke(delegate
{
PostMessages();
});
};
} protected void PostMessages()
{
msg = RegisterWindowMessage(msgstr);
if (msg == )
{
MessageBox.Show(Marshal.GetLastWin32Error().ToString());
}
PostMessage(HWND_BROADCAST, msg, IntPtr.Zero, IntPtr.Zero);
}
如下是项目B的窗体代码:
<Window x:Class="IPC.AppB.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="App B"
Height="350"
Width="525">
<Grid>
<Button Name="btnOK" Content="0" HorizontalAlignment="Left" Margin="230,132,0,0" VerticalAlignment="Top" Width="75"/>
</Grid>
</Window>
项目B的后置代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Interop;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes; namespace IPC.AppB
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private MainWindow _instance;
private object _lock = new object();
private string msgtext = "inter-process communtcation";
private uint msg;
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern uint RegisterWindowMessage(string lpString); public MainWindow()
{
InitializeComponent(); this.Loaded += (s, e) => {
Load();
}; //this.btnOK.Click += (s, e) => {
// MessageBox.Show("AppB's button is clicked.");
//};
} public MainWindow Instance
{
get
{
lock (_lock)
{
if (_instance == null)
{
_instance = new MainWindow();
}
return _instance;
}
}
} protected void Load()
{
MainWindow main = Instance;
main.Dispatcher.Invoke(delegate {
msg = RegisterWindowMessage(msgtext);
if (msg == )
{
MessageBox.Show(Marshal.GetLastWin32Error().ToString());
}
});
} int i = ;
protected void PromptMsgs()
{
this.Dispatcher.Invoke(new Action(delegate
{
btnOK.Click += (s, e) =>
{
//do nothing..
}; this.btnOK.Content = (++i).ToString(); MessageBox.Show("AppB's button is clicked.");
}));
} protected override void OnSourceInitialized(EventArgs e)
{
base.OnSourceInitialized(e); HwndSource sorce = PresentationSource.FromVisual(this) as HwndSource;
sorce.AddHook(new HwndSourceHook(WndProc));
} private IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled)
{
if (msg == this.msg)
{
PromptMsgs();
}
return IntPtr.Zero;
} protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
base.OnClosing(e);
Environment.Exit();
}
}
}
需要代码的朋友请留言!
WPF 进程间通讯----inter-process communication的更多相关文章
- wpf进程间通讯
wpf进程间通讯 在联想智能识别项目中,需要用到进程间通讯,并且是低权限向高权限发送消息.首先声明一下,此项目是wpf的. 首先先简要说一下什么时候会用到进程间通讯,如:在Windows程序中,各个进 ...
- Android(java)学习笔记232:Android进程间通讯(IPC)之AIDL
一.IPC inter process communication 进程间通讯 二.AIDL android interface defination language 安卓接口定义语言 满 ...
- Android(java)学习笔记175:Android进程间通讯(IPC)之AIDL
一.IPC inter process communication 进程间通讯 二.AIDL android interface defination language 安卓接口定义语言 满 ...
- Python 第八篇:异常处理、Socket语法、SocketServer实现多并发、进程和线程、线程锁、GIL、Event、信号量、进程间通讯
本节内容: 异常处理.Socket语法.SocketServer实现多并发.进程和线程.线程锁.GIL.Event.信号量.进程间通讯.生产者消费者模型.队列Queue.multiprocess实例 ...
- Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身
本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android中进程间通信是比较难的一部分,同时又非常 ...
- High Performance Networking in Google Chrome 进程间通讯(IPC) 多进程资源加载
小结: 1. 小文件存储于一个文件中: 在内部,磁盘缓存(disk cache)实现了它自己的一组数据结构, 它们被存储在一个单独的缓存目录里.其中有索引文件(在浏览器启动时加载到内存中),数据文件( ...
- Android进阶笔记04:Android进程间通讯(IPC)之Messenger
一. Android进程间通讯之Messenger 的引入 (1)引言: 平时一说进程间通讯,大家都会想到AIDL,其实messenger和AIDL作用一样,都可以进行进程间通讯.它是基于消 ...
- 服务 远程服务 AIDL 进程间通讯 IPC
Activity aidl接口文件 package com.bqt.aidlservice; interface IBinderInterface { /* 更改文件后缀为[.aidl]去掉 ...
- C#进程间通讯技术-整理。
原文:C#进程间通讯技术-整理. 扩展阅读:http://www.cnblogs.com/joye-shen/archive/2012/06/16/2551864.html 一.进程间通讯的方式 1) ...
随机推荐
- 让DIV浮动在表格上固定位置,不会随着显示器的分辨率变化。
<td> <div class="box"> <img src="/aa.jpg" /> <div class=&qu ...
- MVC自定义错误页404静态页
昨天公司要求给所有项目添加自定义404错误页,具体的要求实现的有以下几点: 1.实现自定义错误(如各种error,404等)跳转到指定的页面 2.所指定的页面输出的http状态值必须是404或其他指定 ...
- ASP.NET C# 文件下载
1.文件下载到客户端 //WriteFile实现下载 protected void Download_Click(object sender, EventArgs e) { string fileNa ...
- C# WinForm动态调用远程Web服务
本文转自:http://blog.csdn.net/muyangjun/article/details/7930871 1.添加服务引用 2.在弹出的添加服务引用对话框地址栏中输入WebService ...
- Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法
Tomcat 优化 java.lang.OutOfMemoryError: Java heap space 的解决方法 java.lang.OutOfMemoryError: Java heap sp ...
- arcgis js api 本地化配置
配置arcgis library 根目录的init.js的 "baseUrl:",使其指向正确的地址
- 最新13个加速 Web 开发的框架和工具
我们为开发人员挑选了15个最新的Web开发框架,你肯定尝试一下这些新鲜的框架,有的可能略微复杂,有的提供了很多的配置选项,也有一些窗口小部件和界面交互的选择.他们将帮助你创建更优秀的网站,提供给用户更 ...
- Fragstats景观分析研究
QQ 交流群: Fragstats景观分析 加群链接:http://url.cn/N4wZ3N
- C语言实现基于投票规则的细胞自动机
算法介绍 首先我们先看一下“基于投票规则的细胞自动机”的定义: 基于投票规则的细胞自动机,实际上是具有如下限定条件的一种细胞自动机: 状态:0或1: 邻居:中心的3*3邻居: 规则:计数p表示中心的3 ...
- Linux 下安装服务器安全狗
1.网上下载服务器安全狗的软件包 32位和64位 wget http://www.safedog.cn/server_safedog_linux.html/safedog_linux32.tar ...