- sm_SPS 이벤트 핸들러에서 장치 연결 및 상태 전송을 비동기로 처리 - DeviceConnectionWorker 스레드로 장치 연결 분리 - SPS(1초), Running(2초) 타임아웃 보호 추가 - 상태머신 모니터링 디버그 창 추가 (fStateMachineDebug) - F11/F12 단축키로 스레드 덤프 및 디버그 브레이크 지원 - RaiseMessage 이벤트 비동기 처리로 로그 블로킹 방지
76 lines
2.5 KiB
C#
76 lines
2.5 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace Project.StateMachine
|
|
{
|
|
public partial class StateMachine
|
|
{
|
|
public class StateMachineMessageEventArgs : EventArgs
|
|
{
|
|
public string Header { get; set; }
|
|
public string Message { get; set; }
|
|
public StateMachineMessageEventArgs(string header_, string message_)
|
|
{
|
|
this.Message = message_;
|
|
this.Header = header_;
|
|
}
|
|
}
|
|
public event EventHandler<StateMachineMessageEventArgs> Message;
|
|
void RaiseMessage(string header, string msg)
|
|
{
|
|
if (Message != null)
|
|
{
|
|
try
|
|
{
|
|
// 비동기로 이벤트 발생 (블로킹 방지)
|
|
var handler = Message;
|
|
if (handler != null)
|
|
{
|
|
var args = new StateMachineMessageEventArgs(header, msg);
|
|
System.Threading.ThreadPool.QueueUserWorkItem(_ =>
|
|
{
|
|
try
|
|
{
|
|
handler(this, args);
|
|
}
|
|
catch { /* 이벤트 핸들러 예외 무시 */ }
|
|
});
|
|
}
|
|
}
|
|
catch { /* 예외 무시 */ }
|
|
}
|
|
}
|
|
|
|
public class StepChangeEventArgs : EventArgs
|
|
{
|
|
public eSMStep Old { get; set; }
|
|
public eSMStep New { get; set; }
|
|
public StepChangeEventArgs(eSMStep old_,eSMStep new_)
|
|
{
|
|
this.Old = old_;
|
|
this.New = new_;
|
|
}
|
|
}
|
|
public class RunningEventArgs : EventArgs {
|
|
public Boolean isFirst { get; set; }
|
|
public eSMStep Step { get; set; }
|
|
public TimeSpan StepTime { get; set; }
|
|
public object Data { get; set; }
|
|
public RunningEventArgs( eSMStep step_, Boolean isfirst_,TimeSpan steptime_,object data = null)
|
|
{
|
|
this.isFirst = isfirst_;
|
|
this.Step = step_;
|
|
StepTime = steptime_;
|
|
this.Data = data;
|
|
}
|
|
}
|
|
public event EventHandler<StepChangeEventArgs> StepChanged;
|
|
public event EventHandler SPS;
|
|
public event EventHandler<RunningEventArgs> Running;
|
|
}
|
|
|
|
|
|
}
|