我有一个WPF C#应用程序,它使用分派器计时器来更新UI。WPF中的线程锁定,带调度计时器
在线程A中,在类DataProcessor
中,我更新了一个变量,一个名为'FinalMarkers'的自定义结构。
static readonly Object mLock = new Object();
static List<Storage.FiducialMarkers> finalMarkers;
public List<Storage.FiducialMarkers> FinalMarkers
{
get { return finalMarkers; }
set
{
lock (mLock)
{
finalMarkers = value;
}
}
}
,然后线程运行中:
FinalMarkers = pullFiducialData();
在我的UI形式,我传递的DataProcessor
到实例
我使用下面的锁定变量更新表单的构造函数。
protected DataProcessor Data = null;
public FormView(DataProcessor _Data)
{
Data = _Data;
}
然后我有一个调度员计时器调用变量:
DispatcherTimer timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(20);
timer.Tick += timer_Tick3d;
timer.Start();
在计时器滴答功能
,我抢值:
List<Storage.FiducialMarkers> tmpList = new List<Storage.FiducialMarkers>();
tmpList = Data._processingArgs.FinalMarkers;
这将运行一段时间,然后崩溃没有错误。我处理线程锁定错误?
这是将数据从另一个线程传递到调度计时器的正确方法吗?
谢谢。
我怀疑它与你的锁有关。实施它只是没有用处。你必须弄清楚抛出了什么异常,并且包含堆栈跟踪和消息。 – Evk