我想为WinForm应用程序使用MVP设计模式,但我面临从另一个线程调用View Update的问题。
这是我的代码
MODEL
public interface IHomeView
{
string StatusListView { get; set; }
}
PRESENTER
public interface IModel
{
string Status { get; set; }
}
INTERFACE VIEW-PRESENTER
public partial class frmMain : Form, IHomeView
{
HomePresenter _Presenter;
public frmMain()
{
InitializeComponent();
_Presenter = new HomePresenter(this);
}
public string StatusListView
{
get
{
return lstActivityLog.Text;
}
set
{
lstActivityLog.Items.Add(value);
}
}
private void btnAvvia_Click(object sender, EventArgs e)
{
_Presenter.launchLongOperation();
}
}
INTERFACE PRESENTER-MODEL
{{1}}
FORM:
{{1}}
我想在Model类的长时间操作期间更新Main表单中的列表视图。
这是最好的方法吗?
答案 0 :(得分:0)
尝试使用此代码而不进行调试,您会对它的工作感到惊讶!
使它在调试模式下工作的快速而肮脏的方法是将Control.CheckForIllegalCrossThreadCalls = false;
添加到表单的构造函数中。
public partial class MainForm : Form, IHomeView
{
HomePresenter _Presenter;
public MainForm()
{
InitializeComponent();
Control.CheckForIllegalCrossThreadCalls = false; //<-- add this
_Presenter = new HomePresenter(this);
}
public string StatusListView
{
get
{
return lstActivityLog.Text;
}
set
{
lstActivityLog.Items.Add(value);
}
}
private void button1_Click(object sender, EventArgs e)
{
_Presenter.LaunchLongOperation();
}
}