java 多线程 调用 dll 出错_多线程:如何管理调用所有会话错误访问的DLL的MVC Action?...

在使用ActiveReports DLL时遇到多线程并发问题,导致用户在Preview Action中预览报告时出现数据混乱。当前代码通过在Print控制器的Preview方法中调用DLL,但需要解决不同会话间的互斥访问。考虑引入锁机制,以确保每个用户线程独占访问,同时探讨ASP.NET是否能为每个请求创建独立的工作进程,以避免资源冲突。
摘要由CSDN通过智能技术生成

我有一个ActiveReports [ActiveReports版本8,.Net] DLL,我的代码在 Print 控制器的 Preview 动作中调用 . 出于某种原因,当用户同时访问它时(当然是来自不同的会话),数据会被破坏,他们会看到彼此的数据或缺少数据 .

public ActionResult Preview(int? id)

{

if (id != null)

{

string reportInfo = null;

....

MyARNamespace.ActiveReportsClass report = new MyARNamespace.ActiveReportsClass();

try

{

using (MemoryStream stream = new MemoryStream())

{

reportInfo = report.RunReport(parameters, stream);

if (stream.Length != 0)

{

stream.Position = 0;

byte[] pdf = stream.ToArray();

return File(pdf, "application/pdf");

}

else

{

return HttpNotFound(reportInfo);

}

}

}

catch(Exception ex)

{

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java多线程可以调用DLL(Dynamic-Link Library)来进行一些特定操作。 首先,在Java调用DLL需要使用到Java Native Interface(JNI)技术。JNI是Java提供的一种机制,用于在Java程序中调用本地的C/C++代码。通过JNI,我们可以在Java程序中加载和调用DLL中的函数。 在多线程调用DLL的过程如下: 1. 首先,在Java中编写一个JNI的接口类,用于定义与DLL中函数的映射关系。这个接口类需要使用Java的native关键字来声明与DLL中函数对应的本地方法。 2. 在DLL中实现与接口类中声明的本地方法对应的C/C++函数。这些函数可以通过DLL导出符号的方式供Java程序调用。 3. 在Java程序中加载DLL调用其中的函数。 使用多线程调用DLL时,需要注意以下几点: 1. 线程安全性:在多线程环境下调用DLL时,需要确保DLL中的函数是线程安全的,即能够正确处理多个线程间的共享数据。 2. 同步控制:如果DLL中的函数需要访问共享资源,需要在Java程序中使用同步控制机制,如synchronized关键字或Lock对象来确保线程之间的互斥访问。 3. 线程间通信:如果多个线程需要相互通信,可以通过共享内存或消息传递的方式实现。在DLL中可以使用线程同步的机制来实现线程间的互斥、等待和通知操作。 总之,Java多线程可以通过JNI技术调用DLL来完成一些底层的特定操作。在进行多线程调用DLL时,需要保证线程安全性,确保合适的同步控制和线程间通信方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值