.NET assembly fail at method call
2 ビュー (過去 30 日間)
古いコメントを表示
I have the class in C#
using System;
using System.Collections.Generic;
using System.Configuration;
using System.IO;
namespace Logging
{
/// <summary>
/// A Logging class implementing the Singleton pattern and an internal Queue to be flushed perdiodically
/// </summary>
public class LogWriter
{
private static LogWriter instance;
private static Queue<Log> logQueue;
private static string logDir = "";
private static string logFile = "log.txt";
private static int maxLogAge = int.Parse("10");
private static int queueSize = int.Parse("5");
private static DateTime LastFlushed = DateTime.Now;
/// <summary>
/// Private constructor to prevent instance creation
/// </summary>
private LogWriter() { }
/// <summary>
/// An LogWriter instance that exposes a single instance
/// </summary>
public static LogWriter Instance
{
get
{
// If the instance is null then create one and init the Queue
if (instance == null)
{
instance = new LogWriter();
logQueue = new Queue<Log>();
}
return instance;
}
}
/// <summary>
/// The single instance method that writes to the log file
/// </summary>
/// <param name="message">The message to write to the log</param>
public void WriteToLog(string message)
{
// Lock the queue while writing to prevent contention for the log file
lock (logQueue)
{
// Create the entry and push to the Queue
Log logEntry = new Log(message);
logQueue.Enqueue(logEntry);
// If we have reached the Queue Size then flush the Queue
if (logQueue.Count >= queueSize || DoPeriodicFlush())
{
FlushLog();
}
}
}
private bool DoPeriodicFlush()
{
TimeSpan logAge = DateTime.Now - LastFlushed;
if (logAge.TotalSeconds >= maxLogAge)
{
LastFlushed = DateTime.Now;
return true;
}
else
{
return false;
}
}
/// <summary>
/// Flushes the Queue to the physical log file
/// </summary>
private void FlushLog()
{
while (logQueue.Count > 0)
{
Log entry = logQueue.Dequeue();
string logPath = logDir + entry.LogDate + "_" + logFile;
// This could be optimised to prevent opening and closing the file for each write
using (FileStream fs = File.Open(logPath, FileMode.Append, FileAccess.Write))
{
using (StreamWriter log = new StreamWriter(fs))
{
log.WriteLine(string.Format("{0}\t{1}",entry.LogTime,entry.Message));
}
}
}
}
}
/// <summary>
/// A Log class to store the message and the Date and Time the log entry was created
/// </summary>
public class Log
{
public string Message { get; set; }
public string LogTime { get; set; }
public string LogDate { get; set; }
public Log(string message)
{
Message = message;
LogDate = DateTime.Now.ToString("yyyy-MM-dd");
LogTime = DateTime.Now.ToString("hh:mm:ss.fff tt");
}
}
}
I want to call the logger function from Matlab
x=NET.addAssembly('C:\Users\timo\Documents\MATLAB\Datatype\Logging.dll');
works
But then this
writer = Logging.LogWriter.Instance();
gives error: Array formation and indexing are not allowed on .NET objects.
0 件のコメント
回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で MATLAB Compiler についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!