У меня есть 3 пользовательских элемента управления в моей основной форме, и я создал все пользовательские элементы управления в основной форме Ctor. Проблема в том, что я использую Task.Run в Ctor Monitoring, и все работает нормально, но когда я изменяю usercontrol (Page) и возвращаюсь в МониторингСтраница, task.run в Ctor Monitoring не работает, но когда я использую Dispatcher.Invoke, все коды работают нормально, но пользовательский интерфейс зависает.
Основная форма: // Pages PageHome ph;PageMonitoring PM;PageAboutus pa;
public FrmMain(string userName, string password)
{
InitializeComponent();
HomeLoadOfflineHelper.HomeLoadOffline(userName, password);
txbUserName = userName;
ph = new PageHome(userName, password);
pm = new PageMonitoring();
pa = new PageAboutus();
DataContext = this;
}
Ctor мониторинга:
public PageMonitoring()
{
InitializeComponent();
InitializeNetworkInterface();
Task.Run(() =>
{
short Counter = 0;
LessPingSeries = new ChartValues<ObservableValue> { };
NormalPingSeries = new ChartValues<ObservableValue> { };
DownloadSeries = new ChartValues<ObservableValue> { };
UploadSeries = new ChartValues<ObservableValue> { };
while (true)
{
Thread.Sleep(2000);
MessageBox.Show("OK");
using (Ping ping = new Ping())
{
LessPingSeries.Add(new ObservableValue(ping.Send("8.8.8.8").RoundtripTime));
NormalPingSeries.Add(new ObservableValue(ping.Send("4.2.2.4").RoundtripTime));
}
DownloadSeries.Add(new ObservableValue(ByteSize.FromBytes(bytesReceivedSpeed).MegaBytes));
UploadSeries.Add(new ObservableValue(ByteSize.FromBytes(bytesSentSpeed).MegaBytes));
Counter++;
if (Counter >= 5)
{
LessPingSeries.RemoveAt(0);
NormalPingSeries.RemoveAt(0);
DownloadSeries.RemoveAt(0);
UploadSeries.RemoveAt(0);
Counter--;
}
Application.Current.Dispatcher.Invoke(() =>
{
UpdateNetworkInterface();
});
}
});
DataContext = this;
}