Remoting事件机制续

数字电路逻辑与设计实验三 译码器和数据选择器 1. 译码器功能测试 将 74LS139 按图 3.1 接线,按表 3.2 输入电平分别置位,填输出状态表。 2. 译码器转换 将双 2-4 线译码器转换为 3-8 线译码器。 (1)画出转换电路图。 (2)在实验箱上接线并验证设计是否正确。 (3)设计并填表写该 3-8 线译码器功能表,画出输入、输出波形。 3. 数据选择器的测试及应用 (1) 将双 4 选 1 数据选择器 74LS153 参照图 3.2 接线,测试其功能并填写功能表 3.3。 (2)将实验箱脉冲信号源中固定连续脉冲 4 个不 阅读详情
(1)关闭一个客户端以后会影响其他的客户端事件
原因:客户端没有取消事件订阅就关闭了,触发事件的时候找不到事件订阅者
解决:遍历委托链,找到异常的对象,从委托链中卸下
(2)服务器端对客户端广播,客户端能收到其他客户端的事件处理信息
原因:使用了Singleton模式,共享远程对象
解决:因为需要远程对象有状态且不共享实例,所以只有客户端激活可以选择

修改后的服务端:
using System; 
using System.Collections; 
using System.Runtime.Remoting; 
using System.Runtime.Remoting.Channels; 
using System.Runtime.Remoting.Channels.Tcp; 
using System.Runtime.Serialization.Formatters; 

namespace RemoteServer 
{ 
    
class MyServer 
    { 
        [STAThread] 
        
static void Main(string[] args) 
        { 
            RemotingConfiguration.ApplicationName
="RemoteObject.MyObject";
            RemotingConfiguration.RegisterActivatedServiceType(
typeof(RemoteObject.MyObject)); 
            BinaryServerFormatterSinkProvider serverProvider 
= new BinaryServerFormatterSinkProvider();  
            BinaryClientFormatterSinkProvider clientProvider 
= new BinaryClientFormatterSinkProvider();  
            serverProvider.TypeFilterLevel 
= TypeFilterLevel.Full;  
            IDictionary props 
= new Hashtable();  
            props[
"port"]=8888;  
            TcpChannel channel 
= new TcpChannel(props,clientProvider,serverProvider);  
            ChannelServices.RegisterChannel(channel);  
            Console.ReadLine(); 
        } 
    } 
} 

修改后的远程对象:
using System; 

namespace RemoteObject 
{ 
    [Serializable] 
    
public class MyEventArgs:EventArgs 
    { 
        
private int _rate; 
        
private string _ip; 

        
public int Rate 
        { 
            
get 
            { 
                
return _rate; 
            } 
        } 

        
public string IP 
        { 
            
get 
            { 
                
return _ip; 
            } 
        } 

        
public MyEventArgs(int rate,string ip) 
        { 
            
this._rate=rate; 
            
this._ip=ip; 
        } 
    } 

    
public class MyObject:MarshalByRefObject 
    { 
        
public delegate void MyEventHandler(object sender,MyEventArgs e); 
        
public event MyEventHandler MyEvent; 
        
public string tmp;

        
public int ALongTimeMethod(int a,int b,int time,string ip) 
        { 
            Console.WriteLine(
"来自"+ip+"的异步方法开始"); 
            
for(int i=1;i<=10;i++) 
            { 
                System.Threading.Thread.Sleep(time); 
                Console.WriteLine(
"来自"+ip+"的异步方法完成了"+i*10+"%"); 
                OnMyEvent(
new MyEventArgs(i,ip)); 
            } 
            Console.WriteLine(
"来自"+ip+"的异步方法结束"); 
            
return a+b; 
        } 

        
protected void OnMyEvent(MyEventArgs e) 
        { 
            
if (MyEvent!=null) 
            { 
                
foreach(Delegate d in MyEvent.GetInvocationList())
                {
                    
try
                    {
                        ((MyEventHandler)d)(
this,e); 
                    }
                    
catch
                    {
                        MyEvent
-=(MyEventHandler)d;
                    }
                }
            } 
        } 
    } 

    
public class EventClass:MarshalByRefObject 
    { 
        
public void MyEvent(object sender,MyEventArgs e) 
        {
            
if(((MyObject)sender).tmp==e.IP)
                Console.WriteLine(
"异步方法完成了"+e.Rate*10+"%"); 
        }  
    } 
} 

修改后的客户端:
using System; 
using System.Net; 
using System.Collections; 
using System.Text; 
using System.Runtime.Remoting; 
using System.Runtime.Remoting.Channels; 
using System.Runtime.Remoting.Channels.Tcp; 
using System.Runtime.Serialization.Formatters; 

class MyClient 
{ 
    
private delegate int MyDelegate(int a,int b,int time,string ip); 
    
private static MyDelegate md; 
    
static RemoteObject.MyObject app;
    
static RemoteObject.EventClass ec;
    
static DateTime dt;

    [STAThread] 
    
static void Main(string[] args) 
    { 
        dt
=DateTime.Now; 
        RemotingConfiguration.RegisterActivatedClientType(
typeof(RemoteObject.MyObject),"tcp://localhost:8888/RemoteObject.MyObject");
        BinaryServerFormatterSinkProvider serverProvider 
= new BinaryServerFormatterSinkProvider();  
        BinaryClientFormatterSinkProvider clientProvider 
= new BinaryClientFormatterSinkProvider();  
        serverProvider.TypeFilterLevel 
= TypeFilterLevel.Full;  
        IDictionary props
=new Hashtable();  
        props[
"port"]=0;  
        TcpChannel channel 
= new TcpChannel(props,clientProvider,serverProvider);  
        ChannelServices.RegisterChannel(channel);  
        app
=new RemoteObject.MyObject(); 
        ec
=new RemoteObject.EventClass(); 
        app.MyEvent
+=new RemoteObject.MyObject.MyEventHandler(ec.MyEvent); 
        md
=new MyDelegate(app.ALongTimeMethod); 
        AsyncCallback ac
=new AsyncCallback(MyClient.CallBack); 
        IPHostEntry ipHE
=Dns.GetHostByName(Dns.GetHostName()); 
        Random rnd
=new Random(System.Environment.TickCount);
        
string ip=ipHE.AddressList[0].ToString()+"("+rnd.Next(100000000).ToString()+")";
        app.tmp
=ip;
        IAsyncResult Iar
=md.BeginInvoke(1,2,500,ip,ac,null); 
        Method(); 
        Console.WriteLine(
"用了"+((TimeSpan)(DateTime.Now-dt)).TotalSeconds+"秒"); 
        ChannelServices.UnregisterChannel(channel); 
        Console.ReadLine(); 
    } 

    
public static void CallBack(IAsyncResult Iar) 
    { 
        
if(Iar.IsCompleted) 
        { 
            Console.WriteLine(
"结果是"+md.EndInvoke(Iar)); 
            app.MyEvent
-=new RemoteObject.MyObject.MyEventHandler(ec.MyEvent); 
        } 
    }  

    
public static void Method() 
    { 
        Console.WriteLine(
"主线程方法开始"); 
        System.Threading.Thread.Sleep(
5000); 
        Console.WriteLine(
"主线程方法结束"); 
    } 
} 

之所以要在ip地址后面跟上随机数,是因为可能在一个机器上会打开多个客户端,需要在这个时候能在服务器端区分多个客户端。



备注:我的所有例子都是在客户端和服务器端部署远程对象的,其实这个做法不是很好,我们应该仅仅把接口部署在两地,远程对象仅仅部署在服务器端即可。
YOLOv8首创原创改进:即插即用|创新的轻量化非对称多级压缩LADH检测头 总结而言,本文介绍了一种名为轻量化非对称多级压缩LADH检测头的原创改进,该改进可与YOLOv8无缝适配,并显著提升了检测器的性能。在本文中,我们介绍了一种原创改进的检测头,名为轻量化非对称多级压缩LADH检测头,它可与YOLOv8无缝适配,显著提升了检测器的性能。此外,我们引入了多级压缩的概念,通过在不同的检测层级上应用不同程度的压缩,进一步提升了检测头的轻量化特性。具体而言,我们采用了逐级减少卷积核数量和通道数量的策略,以降低模型的参数量和计算复杂度,同时保持较高的检测精度。 阅读详情

相关推荐

在Ansys Simplorer中设计三相逆变器,并与Maxwell FEA耦合,实现160kW PMSM

在这篇博文中,我们将探讨如何使用设计三相逆变器,并将其与Ansys Maxwell中的电磁有限元分析模型耦合,以获得准确的系统级结果。Ansys Electronics为多域仿真提供了强大的生态系统,可实现跨各种物理领域的无缝集成。Maxwell用于电磁有限元分析 (FEA),Simplorer(Twin Builder) 用于系统级逆变器和控制器设计,Icepak用于电子热仿真。例如,我们将使用 Simplorer 介绍160 kW、8 极永磁同步电机 (PMSM)的逆变器设计过程。让我们开始吧!

jkh920184196的博客 1427

(原创)一步一步学Remoting之六:事件(2)

                                                (原创)一步一步学Remoting之六:事件(2) 到了午休的时间,抓紧时间继续写,上次说有2个遗留问题:(1)关闭一个客户端以后会影响其他的客户端事件原因:客户端没有取消事件订阅就关闭了,触发事件的时候找不到事件订阅者解决:遍历委托链,找到异常的对象,从委托链中卸下(2)服务器端对客户端广播

482

探索Python融合地学:一文解决osgeo库安装失败问题

总结一下,要安装osgeo模块,关键在GDAL依赖库的安装,如果能够顺利安装GDAL依赖库,因其是osego的模块,因此osgeo的部分模块也能够得到自动安装,此时再运行代码,发现代码并不报错,能够正常运行了。第一步,我们要安装imagecodecs库,它支持多种常见的图像格式,当然也包含我们的目标tif格式,为方便后续的图像处理和安装osgeo模块,先安装此库。目前GDAL已经更新到了3.10版本,这里主要看你的Python版本是上面,小编用的是Python3.13,电脑是64位的,因此,我们选择。

Promising_GEO的博客 5463

服务端没法监听客户端连接断开的问题

原因: 程序初始化时候,没有注册消息,以及处理该消息的例程函数在程序初始化时要用API 注册WTSRegisterSessionNotification(this->m_hWnd, NOTIFY_FOR_ALL_SESSIONS);这样 系统接收到消息后会发送给WndProc,在WndProc中进行相应的处理.

dadalan的专栏 1268

MATLAB实战:5步搞定GNSS单点定位解算(附完整代码)

本文提供了一份基于MATLAB的GNSS单点定位实战指南。通过5个核心步骤,详细讲解了如何从卫星坐标和伪距观测值出发,利用最小二乘迭代算法,构建并实现一个完整的单点定位解算器。文章附有完整代码,并涵盖精度评估与结果分析,适合GNSS初学者和MATLAB用户快速上手实践。

a2b3c4d5e的博客 250

解决 Clawdbot 对接 Minimax 出现 401 (Token is unusable) 的问题排查与修复

即便确认 API Key 有效且余额充足,该问题仍可能在 Clawdbot 中持续出现,而在其他工具(如 curl 或 Postman)中测试正常。

hampeter的博客 3076

RabbitMQ学习之基于spring-rabbitmq的RPC远程调用

spring-rabbitmq中实现远程接口调用,主要在com.rabbitmq.spring.remoting下几个类: 发布服务端(Server):RabbitInvokerServiceExporter.java 接口调用客户端(Client):RabbitInvokerProxyFactoryBean.java,RabbitInvokerClientInterceptor.java,

l192168134的博客 4313

保姆级教程:用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信(附完整代码)

本文详细介绍了如何利用GD32F470的EXMC Bank0 Region0与FPGA实现16位并行通信,涵盖硬件连接、寄存器配置、时序优化及FPGA接口设计等关键步骤。通过实例代码和调试技巧,帮助开发者快速掌握高效数据交互技术,提升嵌入式系统设计能力。

weixin_26918763的博客 226

Remoting的事件机制(带具体例子)

概念就不说了,具体参见msdn相关章节: http://msdn.microsoft.com/library/CHS/cpguide/html/cpconEvents.asp 我们先来改造一下上次的程序,为上次的主线程方法添加事件,能不断的引发事件来汇报处理的进度:public class MyEventArgs {     private int _rate;          publ

冷枫@优快云 1436

直线型一阶倒立摆1---从理论到实践的桥梁

本文深入探讨了直线型一阶倒立摆在控制理论中的核心地位,从非线性控制、鲁棒性到实时反馈等关键问题。通过实际案例和硬件搭建指南,帮助读者理解从理论到实践的过渡,特别适合控制工程初学者和研究人员。文章还提供了算法选型建议和硬件避坑手册,是掌握倒立摆控制的实用指南。

weixin_29047545的博客 322

基于RK3588调试WiFi模块AIC8800

本文介绍了在RK3588平台上移植AIC8800 WiFi模块驱动的过程。开发环境基于Linux 6.1内核和Buildroot文件系统。驱动移植步骤包括:将驱动包放入SDK指定目录、修改Makefile、编译内核、放置固件文件、手动加载驱动模块等。文章还分析了两种常见异常情况:无法识别模块(检查USB信号线路和供电)和偶发断连(检查硬件连接和调整PHY寄存器)。成功加载后可通过ifconfig看到wlan0节点。

qq_45147279的博客 667

.Net中Remoting通信机制

Remoting通信机制 Remoting介绍 主要元素 通道类型 激活方式 对象定义 Remoting介绍 什么是Remoting,简而言之,我们可以将其看作是一种分布式处理方式。 从微软的产品角度来看,可以说Remoting就是DCOM(分布式组件对象模型,分布式组件对象模式)的一种升级,它改善了很多功能,并极好的融合到.Net平台下。Mic

JiYF大男孩 2795

数据仓库从明细到汇总:DWD与DWS层建模实战指南

DWS层的“主题”是指业务分析的核心场景,通常分为“用户主题、商品主题、订单主题、营销主题”等。主题的定义需紧密结合业务需求,避免“为了汇总而汇总”。例如,电商平台的核心业务需求包括“用户活跃度分析”“商品销售情况分析”“订单转化分析”,对应的DWS层主题即可定义为“用户主题汇总表”“商品主题汇总表”“订单主题汇总表”。主题定义时需注意“粒度适中”——汇总粒度既不能过细(否则与DWD层重复,失去汇总意义),也不能过粗(否则无法满足细分分析需求)。

2401_83088008的博客 646

一步一步学Remoting之六:事件(1)

原文转自http://www.cnblogs.com/lovecherry/archive/2005/05/24/161437.html 事件 类或对象可以通过事件向其他类或对象通知发生的相关事情。发送(或引发)事件的类称为“发行者”,接收(或处理)事件的类称为“订户”。 具体参见msdn相关章节:http://msdn.microsoft.com/zh-cn/library...

amkr21253的博客 147

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

remoting教学四:remoting的事件

remoting教学四:remoting的事件     现在,为了更好的表现事件,我们将客户端和服务器都用winform来表现。     在如下的例子中,将会产生一个服务器端事件和一个客户端事件。 RemoteObject using System; using System.Windows.Forms; using System.Colle

900

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

利用Remoting实现异步队列机制

<!-- alimama_pid="mm_10249644_1605763_4929893"; alimama_titlecolor="0000FF"; alimama_descolor ="000000"; alimama_bgcolor="FFFFFF"; alimama_bordercolor="E6E6E6"; alimama_linkcolor="0080

1084

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

.net remoting 事件

 创建以Microsoft .NET Remoting为基础的分布式应用架构引言在论坛里经常看见有人问:使用.NET Remoting如何从服务器主动发出事件通知客户端?的确,初接触.NET Remoting的人多半会有这样的疑问,因为大部分的文章和书籍在介绍.NET Remoting时都只介绍了通道,对象,激活和生存周期等等概念,在谈到如何进行远程通信的时候,都只告诉读者如何

RainyLin-SunnyLin的专栏 1248

Microsoft .Net Remoting系列专题之三:Remoting事件处理全接触

(转载) 我写的.Net Remoting系列专题: Microsoft .Net Remoting系列专题之一:.Net Remoting基础篇 Microsoft .Net Remoting系列专题之二:Marshal、Disconnect与生命周期以及跟踪服务 前言:在Remoting中处理事件其实并不复杂,但其中有些技巧需要你去挖掘出来。正是这些技巧,仿佛森严的壁垒,...

120

Remoting的事件机制

概念就不说了,具体参见msdn相关章节: http://msdn.microsoft.com/library/CHS/cpguide/html/cpconEvents.asp 我们为主线程方法添加事件,能不断的引发事件来汇报处理的进度: public class MyEventArgs {     private int _rate;          public int Rate   

Xaero的专栏 850

Remoting技术

Remoting技术简介 一 Remoting技术出现的背景1)分布式应用需求的迅速增长(Peer-to-Peer, Grid等技术的出现)2)原有的C/S, B/S模式和技术已经不能胜任(串口RS232,Socket,RPC,DCOM技术各有缺点)二 什么是Romoting?采用分布式进行编程的一种技术,Remoting主要用于管理跨应用程序域的同步和异步RPC 会话。在默认情况

twindly.lee 2008

[Remoting] 十一:事件

在 Remoting 中使用 Event 主要是为了实现 CallBack 机制,让服务器在接收到某个 "消息" 时,主动调用某个或多个客户端的方法。我们先看一个例子。 using System;using System.Collections;using System.Collections.Generic;using System.Reflection;using System.R...

aome1470的博客 172

PowerShell 第13章:远程处理 Remoting,一对一、一对多、WinRM 原理与企业运维实战

目标:把远程处理(Remoting)的一次讲透,能在真实环境里稳妥落地。

分享 Windows 系统部署、镜像封装、终端管理、故障排查与运维自动化实践,涵盖 Sysinternals、PowerShell 和 AI 工具应用。记录真实问题、探索过程与解决方法,也分享 AI 时代的学习心得和实践经验,让技术更易理解 2万+
上一篇: Remoting的事件机制(带具体例子)
下一篇: 怎么样用PHPMyAdmin 将*.Sql数据倒入MYSQL[经典推荐]
JavaProgramers
博客等级 码龄22年 660粉丝 304原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值