2015-04-16 18 views
0

我找不到一个简单的例子,但我认为这是可能的。我正在调用一种方法。在该方法内部,它会循环多次,每个人都会循环遍历循环。我想通知调用方法并在那里附加一个事件,这样我就可以有一个状态栏来显示进度。如何创建一个可以从我调用的方法内部报告进度的事件处理程序?

换句话说,我有一个状态栏的Winform,并且在这个WinForm应用程序中调用了一个方法。在该方法内循环迭代,我想以某种方式将该信息返回到WinForm应用程序,所以我可以更改状态栏。

if (fDialog.ShowDialog() == DialogResult.OK) 
    { 
     Session s = EncompassSession.Instance2(url, name, password); 
     DataTable dt = ExcelHelper.ReadAsDataTable(fDialog.FileName.ToString()); 
     EncompassBoxHelper.UpdateBoxes(s, dt); //This is the main function that does the long process 
     s.End(); 
    } 
+0

所以你有这样做有什么问题?将委托传递给方法,让类型定义一个事件等等。有很多方法可以做到这一点。你有什么问题? – Servy

回答

2

有多种选择,但一个简单的办法是有你的方法采取了特殊的回调方法作为参数,然后调用该方法在某些点,提供上下文信息。

public void UpdateBoxes(Session s, DataTable dt, Action<ProgressInfo> updateProgress) 
{ 
    for (...) 
    { 
     ... 
     updateProgress(new ProgressInfo(...)); 
    } 
} 

方法,然后可以称为是这样的:

EncompassBoxHelper.UpdateBoxes(s, dt, 
     progress => UpdateProgressBar(progress)); 
+0

谢谢..现在这个..它对我的全新思考水平 – punkouter

+1

似乎工作。哇。那很简单。 – punkouter

相关问题