同步WPF调度程序.从多个后台线程调用
本文关键字:后台 线程 调用 WPF 调度程序 同步 | 更新日期: 2023-09-27 18:10:38
我需要同步调用Dispatcher吗?调用如果从多个后台线程访问?
我知道Dispatcher。BeginInvoke自动同步调用silverlight应用程序(http://msdn.microsoft.com/en-us/library/z8chs7ft(v=vs.95).aspx)
对于wpf应用程序也是这样吗?或者我应该取消下面的锁语句的注释吗?
public MainWindow()
{
InitializeComponent();
Dispatcher.BeginInvoke(new Action(() =>
{
const int MAX_NR_THREADS = 1000;
for (int i = 0; i < MAX_NR_THREADS; ++i)
{
int j = i+1;
new Thread(()=>ThreadMethod(j)).Start();
}
}));
}
private void ThreadMethod(int threadId)
{
const int ONE_MILLION = 1000000;
for (int i = 0; i < ONE_MILLION/threadId; ++i)
{
//lock(lockObj)
//{
this.Dispatcher.Invoke(new Action(() =>
{
int sum = 0;
for (int j = 0; j < ONE_MILLION/10000; ++j)
{
sum += j;
}
int a = sum;
concurrentQueue.Enqueue(threadId*ONE_MILLION);
}));
//}
}
}
不需要同步这些调用。Dispatcher.Invoke
已经有效地为您的呼叫充当队列,并且不需要同步。