In the assembly, I used a timer to periodically check the .txt file status, something like this:
System.Timers.Timer _logFileCheckTimer;
public FijiLauncherControl()
{ // timer set up
_logFileCheckTimer = new System.Timers.Timer(250);
_logFileCheckTimer.Enabled = true;
_logFileCheckTimer.Elapsed += new System.Timers.ElapsedEventHandler(_logFileCheckTimer_Elapsed);
_logFileCheckTimer.Start(); // start the timer
}
void _logFileCheckTimer_Elapsed(object sender, EventArgs e)
{
if (_processOn && IsLogOn)
{
try
{
_processFinished = CheckStatuts(); // checking file status
if (_processFinished) // fire event if checking status returns true
{
OnIjmFinished(EventArgs.Empty);
_processOn = false;
_logFileCheckTimer.Stop();
}
}
catch (Exception ex)
{
}
}
}
In the aseembly. setup a event in the dll that will be triggered if the _processFinished = CheckStatuts();
returns true
:
// event delegate
public delegate void IjmFinishedEventHandler(object sender, EventArgs e);
public event IjmFinishedEventHandler IjmFinished; // event handler
protected virtual void OnIjmFinished(EventArgs e)
{
if (IjmFinished != null) // trigger event
IjmFinished(this, e);
}
In the main application, there should be event receiver, something like this:
private FijiLauncherControl _fl; // the object of your assembly
_fl.IjmFinished += new IjmFinishedEventHandler(_fl_IjmFinished); // event from the assembly should trigger an event handler
void _fl_IjmFinished(object sender, EventArgs e) // event handler
{
_vm.IjmFinished = true; // a boolean var in viewmodel in main app set to be true once the event from the assembly is triggered
//throw new NotImplementedException();
}
That should do the job.