在远程计算机上运行WPF应用程序并通过远程桌面访问它时遇到问题。该应用程序似乎部分冻结:一些绑定工作,一些没有。我们只有这个问题与远程桌面连接,并在几次连接/断开连接后。
我的应用程序应该具有相对的响应性,我们的用户希望确保应用程序即使不与其直接交互也不会被冻结(它是一种监控应用程序)。 为了达到这个目的,我们在主窗口上添加了一个简单的时钟,每秒钟都有一个时钟。
时钟每250毫秒由DispatcherTimer
设置更新,优先级为DataBinding级别。我们只需在每个计时器的刻度上更新绑定到UI的字符串。
当申请被冻结时#34; (即,时钟没有勾选)我可以附加我的Visual Studio调试器,看到计时器不再启用,也不会打勾。
这里有一些代码:
MainWindow (我们的主要用户界面) - 背后的代码
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}
}
MainWindow - Xaml
<Window x:Class="RdpDispatcherTimer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<TextBlock VerticalAlignment="Center" HorizontalAlignment="Center" FontSize="40pt" Text="{Binding Clock}"/>
</Window>
用作DataContext
的ViewModel ,您可以在MainWindow的代码背后看到
public class ViewModel : INotifyPropertyChanged
{
private string _clock;
public ViewModel()
{
var timer = new DispatcherTimer(DispatcherPriority.DataBind) { Interval = TimeSpan.FromMilliseconds(250), IsEnabled = true };
timer.Tick += (o, e) => Clock = DateTime.Now.ToString("T");
}
public string Clock
{
get { return _clock; }
set
{
_clock = value;
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(Clock)));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
有没有人知道在通过远程桌面连接时可能导致调度程序计时器被禁用的原因?