如何从 void 函数返回数据?

2024-04-07

大约一周前,我问了一个有关 activex 和 UDP 的问题。这里是:

C# UDP Socket 客户端和服务器 https://stackoverflow.com/questions/19786668/c-sharp-udp-socket-client-and-server

现在,我创建了两个应用程序,其中一个(发送方)通过 UDP 发送预定义的字符串。另一个是从网页调用的activex组件,它的线程在后台工作。一旦 UDP 消息到达,它就会做它的事情(写入数据库、写入 log.txt 等)。

我需要的最后一件事是返回数据(尚未确定它是字符串还是其他数据)。但是,调用的 activex 中的方法必须是 void,因为如果将其设置为字符串,则线程将无法工作,并且只有第一条消息会到达。

我的问题是,该怎么做?如何从 void 函数返回数据?例如,Web 应用程序现在像这样调用 activex DLL:

    ClassLibrary1.Class1 activex = new ClassLibrary1.Class1();
    activex.StartThread();

StartThread() 调用侦听线程,它在后台工作,一旦 UDP 消息到达,它就会执行我上面所说的一些操作。

我怎样才能用线程(事件)返回值并且网络应用程序将捕获它并使用它?

多谢。


您可以使用事件(实现 Observable 模式)来提醒任何侦听器新消息已到达:

public class NewMessageArgs : EventArgs
{
    public string Message { get; private set; }

    public NewMessageArgs(string message)
    {
        Message = message;
    }
}

public class ActiveXComponent
{
    public event EventHandler<NewMessageArgs> OnMessage;


    public void StartThread()
    {
        while (true)
        {
            //do stuff

            //raise "message received" event
            if (OnMessage != null)
                OnMessage(this, new NewMessageArgs("hi"));
        }
    }
}

然后您可以像这样监听这些事件:

ActiveXComponent activex = new ActiveXComponent();
activex.OnMessage += ProcessMessage;
activex.StartThread();

public void ProcessMessage(object sender, NewMessageArgs args)
{
    var msg = args.Message;
    //process
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 void 函数返回数据? 的相关文章

随机推荐

  • SQL 触发器 - 如何获取更新的值?

    如何在 SQL 触发器中获取更新记录的值 如下所示 CREATE TRIGGER TR UpdateNew ON Users AFTER UPDATE AS BEGIN SET NOCOUNT ON EXEC UpdateProfile S
  • 如何配置 PHP 显示详细错误而不是错误 500 页面?

    我在 IIS 托管上部署了一个 PHP 应用程序 并且总是收到通用 IIS 错误 500 页面 而不是详细的错误页面 我知道我需要修改一些 php ini 文件 来自this https stackoverflow com question
  • 如何对项目的 cron 作业进行版本控制? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有一堆项目 我用 git 和 fab 推送到服务器 它们是 Django 站点的负载 其中一些站点有 cron 作业 我希望处于这样的境地 通
  • 单击浏览器停止按钮时执行操作

    如果这太简单了 我们深表歉意 我是 JQuery 新手 我搜索并发现了类似的问题this https stackoverflow com questions 11220581 jquery browsers stop button even
  • iOS 和 Android 中的照片库

    我正在开发一个用于移动设备运行的应用程序iOS and Android我在访问时遇到一些困难image gallery的设备与Qml 我需要在一个中列出图片库中的图像GridView 我尝试使用返回图片文件夹QStandardPaths但它
  • (Beautiful Soup) 获取按钮标签内的数据

    我尝试在按钮标签内刮出 ImageId 想要得到结果 25511e1fd64e99acd991a22d6c2d6b6c 当我尝试时 drawing url drawing url find all button class inspectB
  • keydown 事件上的 jQuery 触发器()和 stopPropagation()

    我在按键和停止传播方面遇到了困难 我不想刷新我的页面 我已经尝试了我能想到的所有方法 我当前的代码是 知道我在这里做错了什么吗 我认为事件被正确调用 我有 jquery 和 jquery ui 正确链接并且没有收到控制台错误 UPDATE好
  • ggplot2 中的对数色标会压缩某些图例数字

    我正在尝试创建一个类似于以下问题和回答的情节 ggplot2 中有没有内置的方法可以进行对数色标 https stackoverflow com questions 8069837 is there a built in way to do
  • 如何获取网页的公钥?

    如何获取 VeriSign 等网站以及使用 https 安全协议 的所有其他网站的公钥 这取决于您使用的浏览器 如果您让我知道 我会更新我的答案 Chrome 55 及以上您现在可以在开发人员工具中找到此信息 选项 3 个点 gt 更多工具
  • 为什么必须从继承的类中重新声明虚函数?

    我正在开发一个简单的 C 程序 但很难理解我遇到的编译器错误 该问题是由我尝试从基类创建派生类引起的 我在下面发布了具有相同结构的代码 但更改了名称 基类 h ifndef BASECLASS H define BASECLASS H cl
  • 如何以编程方式获取运行 Android 7.0 的设备中已安装的浏览器应用程序的列表?

    在 Android 7 0 之前 我能够检索已安装的浏览器类型应用程序的列表及其包名称 然后 我升级到 Android 7 0 只能检索三星的互联网浏览器 而不能检索其他浏览器类型的应用程序 例如 Chrome Device 三星 Tab
  • 编译时模板参数计算

    我试图在编译时推断两个模板参数中较大的一个 两个模板参数的类型都是 size t 我有一个模板化类型 SomeType 它采用 size t 作为模板参数 然后 我有一个函数 它采用两个具有不同模板 size t 的 SomeType 参数
  • 如何将 HSQL(基于文件)与我的 Android 应用程序连接?

    您好 我在将 Android 应用程序连接到 HSQLDB 时遇到问题 第一个问题 我应该使用 HSQLDB 的特定 android jar 吗 或者我可以使用任何 HSQL jar 吗 第二个问题 如果我可以使用提供的罐子 我如何才能使连
  • Spring Boot锁定代码以获取唯一id

    我编写了一个必须返回唯一字符串的控制器 要求是该控制器的两次调用永远不会返回相同的字符串 即使经过多年 即使代码将扩展到更多虚拟机 我的问题是以下代码是否正确地实现了声明的目的 或者您是否有任何提示 控制器 RestController p
  • EntityManager 注入导致 NullPointerException

    我正在编写我的第一个 Java EE EJB Servlet 等 应用程序 请注意 我正在使用 Eclipse 我遇到了 EntityManager 注入不起作用的问题 并且由于我的 Java EE 以及一般的 Java 新手 很难找到原因
  • 将特征限制在对象上?

    有没有办法限制一个特征 使其只能混合到对象中 例如 trait OnlyForObjects this gt object Foo extends OnlyForObjects gt OK class Bar extends OnlyFor
  • Angular 路由器 URL 编码特殊字符和浏览器行为

    我只是想不出解决这个问题的办法 我正在设计搜索引擎 我想在 url 中显示用户试图查找的内容 如下所示 https my site com search query 28rockstar search true page 0 用户正在尝试寻
  • 如何为成员使用非默认构造函数?

    我有两节课 class a public a int i class b public b Gives me an error here because it tries to find constructor a a a aInstanc
  • MySQL ONLY IN() 等效子句

    我在这里给出了我的问题的一个非常抽象的版本 所以请耐心等待 我有一个查询将检查特定主体是否具有相同类型的某些多个参数 例如 一个男孩对于巧克力有多种选择 但是 我想从桌子上选择那些拥有我提到的巧克力的男孩 不多不少 也不是 LIKE 或 I
  • 如何从 void 函数返回数据?

    大约一周前 我问了一个有关 activex 和 UDP 的问题 这里是 C UDP Socket 客户端和服务器 https stackoverflow com questions 19786668 c sharp udp socket c