【发布时间】:2010-12-22 19:11:23
【问题描述】:
假设我在线程 T 上创建了一个对象 O。我怎样才能从对象 O 内部获取线程 T 并调用该线程上的方法?这样,创建对象的表单就不需要这样做了:
private void ChangeProgress(int value)
{
progressBar1.Value = value;
}
void FD_ProgressChanged(object sender, DownloadEventArgs e)
{
if (InvokeRequired)
{
Invoke(new Action<int>(ChangeProgress), new object[] { e.PercentDone });
}
else ChangeProgress(e.PercentDone);
}
这很丑陋,并且要求使用该对象的人要么找出在创建对象的同一线程上引发了哪些事件,哪些不是,然后在没有的事件上添加 if(InvokeRequired)...else 代码,或者只是添加每个事件处理程序上的代码。我认为如果对象本身负责在正确的线程上调用事件会更优雅。这可能吗?
【问题讨论】:
-
其实我会听汉斯的话,用
BackgroundWorker重写课程。我可以环绕ReportProgress来通知我想要的任何东西。
标签: c# multithreading events