假设我在线程 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# - 在创建对象的线程上调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512786/