使用Bitmap时“无法访问已关闭的流”

时间:2012-09-26 19:11:45

标签: c# smartinspect

我的代码在小型演示应用程序中运行良好,但是,当我在大型生产系统中运行它时会引发以下异常:

Unhandled Exception: System.ObjectDisposedException: Cannot access a closed Stream.
   at System.IO.MemoryStream.get_Length()
   at Gurock.SmartInspect.LogEntry.get_Size()
   at Gurock.SmartInspect.SchedulerCommand.get_Size()
   at Gurock.SmartInspect.SchedulerQueue.Remove(SchedulerQueueItem item)
   at Gurock.SmartInspect.SchedulerQueue.Dequeue()
   at Gurock.SmartInspect.Scheduler.Dequeue()
   at Gurock.SmartInspect.Scheduler.Run()
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
     ContextCallback callback, Object state, Boolean ignoreSyncCtx)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext,
     ContextCallback callback, Object state)
   at System.Threading.ThreadHelper.ThreadStart()

以下是导致错误的C#代码:

// This grabs a bitmap from Mathematica. It works 95% of the time.
Bitmap bitmap = new Bitmap(Globals.State.Mathematica.EvaluateToImage(cmdGraph, 0, 0));

// Log to SmartInspect.
SiAuto.Main.LogBitmap("test", bitmap); // Errors disappear if this line is removed.

1 个答案:

答案 0 :(得分:1)

修正了问题。

如果SmartInspect v3.3.2.48以异步模式运行,则在处理位图时有时会抛出此错误。解决方案是删除连接字符串中的所有“async”标记。

SiAuto.Si.Connections以前的值是:

pipe(reconnect="true", reconnect.interval="30", backlog.enabled="true", backlog.flushon="debug", backlog.keepopen="true", async.enabled="true")

如果我将其更改为此,则可以:

pipe(reconnect="true", reconnect.interval="30", backlog.enabled="true", backlog.flushon="debug", backlog.keepopen="true")

顺便说一句,SmartInspect非常好,我没有抱怨。这是我在2年内发现的第一个问题,因为我使用的是一年前的版本,这个问题可能在最新版本中得到修复。