C#Debug build ok,但Release build由于优化而失败

时间:2018-06-13 10:18:20

标签: c# wpf debugging release

似乎是由于编译器优化:(。net 4.0,VS2015), 这是触摸屏的后台工作者。

DispatchService.BeginInvoke(() =>
{
    _vm = new TouchViewModel(Container.GetExportedValue<ITouchView>());
    _vm.ShowDialog();
});

// the background worker waiting for the Dialog show up
while (_vm == null) ; // Trace.WriteLine($"Wait _vm");
// Get Packet from Touch Panel
_vm.Points.Add(packet);
// (draw on the dialog via data binding)

它适用于&#34; Debug&#34;构建,但永远循环在&#34;发布&#34;建立。 如果在while循环中添加Trace.WriteLine,它也可以。 解决问题的正确方法是什么?

没有等待/异步因为WinXP兼容(.NET 4.0)

1 个答案:

答案 0 :(得分:1)

如果你需要阻止执行,直到委托将在其他一些线程中执行,那么实现正确的同步就是关键。

例如,您可以使用Monitor

// field somewhere
readonly object _lock = new object();

// then
DispatchService.BeginInvoke(() =>
{
    _vm = new TouchViewModel(Container.GetExportedValue<ITouchView>());
    lock(_lock)
        Monitor.Pulse(_lock);
    _vm.ShowDialog();
});
lock(_lock)
    Monitor.Wait(_lock);