Итак, вот мой код:
class Program
{
static DispatchClass dc;
[STAThread]
static void Main(string[] args)
{
dc = new DispatchClass();
Thread th = new Thread(AccessDC);
th.Start();
Console.ReadKey();
}
private delegate void AccessDCDelegate(object state);
static private void AccessDC(object state)
{
if(dc.Dispatcher.CheckAccess())
dc.Print("hello");
else
dc.Dispatcher.Invoke(new AccessDCDelegate(AccessDC));
}
}
public class DispatchClass : DispatcherObject
{
public void Print(string str)
{
Console.WriteLine(str);
}
}
Теперь ... вывод, который я ожидаю получить от этого, заключается в том, что созданный поток проверяет доступ диспетчера, видит, что он находится в другом потоке, а затемвызвать AccessDC (...) в исходном потоке, который затем проверяет и обнаруживает, что он находится в правильном потоке, и вызывает dc.Print (...).
Что на самом деле происходит, так это то, что он попадает в CheckAccess ()и правильно видит, что он не в нужном потоке, затем вызывает Invoke (...) и останавливается на этом.
Любое понимание того, как работает Диспетчер, будет высоко оценено.
Спасибо.