Я пытаюсь оптимизировать мой код, который будет вызываться как из вызова commandline
без пользовательского интерфейса, так и из него из пользовательского интерфейса.
Проблема в том, что я написал вызов letЭто worker-code
внутри Form-класса.Теперь я хочу вытащить этот рабочий код в отдельный класс.
Давайте сделаем небольшой пример, чтобы прояснить мои потребности:
public partial class form1 :Form
{
void AddLogmessage(String msg)
{
// update an listview
ListViewItem item = new ListViewItem();
item.Text = msg;
// Add the item to the ListView
LogView.Items.Add(item);
}
// button on ui to start working
private void btnStartTestRun_Click(object sender, EventArgs e)
{
try
{
DoSomeWork();
}
catch(Exception ex)
{}
}
private void DoSomeWork()
{
// do some really generic hard work....
AddLogMessage("working");
// do some more generic long lasting hard work....
AddLogMessage("working goes on...");
// in case of an error throw Exception
}
Теперь я хочу перекодировать рабочий код для работывне класса формы, но иметь возможность сообщать о том, что происходит с пользовательским интерфейсом (если он есть), или вызывать рабочий код без пользовательского интерфейса и делать другие отчеты для другой цели (общаться с другой библиотекой, которая сообщает результаты на сервер)
Примерно так:
public void AutomaticTaskHandler()
{
string[] cmdline = Environment.GetCommandLineArgs();
Arguments args = new Arguments(cmdline);
if (args["automatic"] != null)
{
doSomeWork();
}
}
В этом случае мне не нужно сообщать сообщения в пользовательский интерфейс, а отправлять некоторые другие сообщения (НЕ те же сообщения !!) насервер.
Таким образом, мой вопрос заключается в том, как сделать так, чтобы не было необходимости писать дважды код doSomeWork, но чтобы можно было отправлять только те сообщения, которые находятся в текущей сцене?
Я думал о Delegates
и Events
, но я не слишком знаком с этим, чтобы сделать эту работу.
Любая помощь будет оценена.
Спасибо Meister_Schnitzel