I think, it's going wrong while casting
ActivityInstance currentactivity = m_WorkItem.Activity as ActivityInstance;
Try changing to
ActivityInstance currentactivity = (ActivityInstance)m_WorkItem.Activity;
Update:
For Automatic Activities, you should use Core Services.
Example:
WorkItemData mWorkItemData = (WorkItemData)mClient.Read(workItemId, mReadOptions);
ActivityInstanceData mCurrentActivity = (ActivityInstanceData)mClient.Read(mWorkItemData.Activity.IdRef, mReadOptions);
TridionActivityDefinitionData mTridionActivityDefinition = (TridionActivityDefinitionData)mClient.Read(mCurrentActivity.ActivityDefinition.IdRef, mReadOptions);
ProcessDefinitionData mProcessDefinition = (ProcessDefinitionData)mClient.Read(mTridionActivityDefinition.ProcessDefinition.IdRef, mReadOptions);
IList<ActivityDefinitionData> mActivityDefinitionList = new List<ActivityDefinitionData>(mProcessDefinition.ActivityDefinitions);
ActivityDefinitionData mNextActivity = (ActivityDefinitionData)mActivityDefinitionList.Where(c => c.Title == "Publish EN to Testing and Staging").FirstOrDefault();
if (mNextActivity != null)
{
DecisionActivityFinishData mDecisionActivityFinishData = new DecisionActivityFinishData
{
NextActivity = new LinkToActivityDefinitionData { IdRef = mNextActivity.Id }
};
mClient.FinishActivity(mCurrentActivity.Id, mDecisionActivityFinishData, mReadOptions);
}
Note: I have not tested above code, just wrote for you.