Я читал некоторый код о виртуализации данных в Интернете. Я встретился с функцией BeginInvoke. В принципе, я знаю, для чего он используется. Но эта функция имеет версию с тремя параметрами, которые я не искал в MSDN.Что делает версия с тремя параметрами BeginInvoke?
я нашел его в MSDN, которая имеет два параметра более:
Кроме того, я не думаю, что это одна я хочу:
Поскольку версия с тремя параметрами имеет тип DispatcherPriority для первого параметра, который код, который я прочитал, не проходит.
Код Читаю является:
using System;
using System.Threading;
namespace WPF.DataVirtualization
{
public class AsyncDataRef<TId, T> : DataRefBase<T> where T : class
{
private readonly TId m_Id;
private int m_Loading;
private readonly Func<TId, T> Load;
private volatile T m_Data;
public AsyncDataRef(TId id, Func<TId, T> load)
{
m_Id = id;
Load = load;
}
public override T Data
{
get
{
if (m_Data != null)
return m_Data;
if (Interlocked.Increment(ref m_Loading) == 1)
if (m_Data == null)
Load.BeginInvoke(m_Id, AsyncLoadCallback, null);
else
Interlocked.Decrement(ref m_Loading);
else
Interlocked.Decrement(ref m_Loading);
return m_Data;
}
}
private void AsyncLoadCallback(IAsyncResult ar)
{
m_Data = Load.EndInvoke(ar);
Interlocked.Decrement(ref m_Loading);
// when the object is loaded, signal that all the properties have changed
NotifyAllPropertiesChanged();
}
}
}
И когда вызов этой функции, она использует его как это:
var list = new List<DataRefBase<Person>>(itemCount);
...
list.Add(new AsyncDataRef<int, Person>(i, LoadPerson));
лицо другой вид класса. LoadPerson - функция делегата. DataRefBase - это своего рода шаблонный класс.
Мой вопрос заключается в строке:
Load.BeginInvoke(m_Id, AsyncLoadCallback, null);
Что три параметра делать? (Кажется, что m_Id используется как int). Что они означают? Где я могу найти документ этой версии BeginInvoke.
Как я думаю (это просто предложение), этот параметр является параметром, который будет передан для обратного вызова на его ivocation –
«Я нашел его в MSDN» - нет, вы этого не сделали; вы обнаружили два других несвязанных метода с тем же именем. Просто потому, что он имеет одно и то же имя, это не значит, что он имеет то же значение; Например, 'Delegate.BeginInvoke' сильно отличается от' Control.BeginInvoke'. Что говорит intellisense или документация о «BeginInvoke» DataVirtualization? Heck, * какой параметр называется *? –
Несколько аналогичный вопрос: http://stackoverflow.com/questions/14961450/where-are-clr-defined-methods-like-delegate-begininvoke-documented – BCdotWEB