0
我試圖優化我的代碼,以便從UI調用commandline
調用或從UI調用它。C#如何從外部代碼更新表單控件
問題是,我已經寫了我們在Form-class裏面寫的worker-code
。 現在我想把這個工人代碼放到一個單獨的類中。
讓我們做一個小樣本,使我的需求更加清晰:
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
}
現在我想refcator工人代碼添加到窗體類以外的地方工作,但能所發生的事情報告給UI(
public void AutomaticTaskHandler()
{
string[] cmdline = Environment.GetCommandLineArgs();
Arguments args = new Arguments(cmdline);
if (args["automatic"] != null)
{
doSomeWork();
}
}
:如果有的話),或致電workercode沒有UI和做其他reportings到不同的目標(與報告結果到服務器上的其他庫)
事情是這樣的溝通
在這種情況下,我不必向用戶界面報告消息,而是向服務器發送一些其他消息(不是相同的消息!!)。
所以我的問題是如何使這個最好的方法不必編寫doSomeWork代碼兩次,但只能發送當前場景中的消息是需要的?
我想過Delegates
和Events
,但我不太熟悉這個工作。
任何幫助將不勝感激。
感謝Meister_Schnitzel