我当前正在开发一个HMI,该HMI必须连接到同一网络上的远程服务器才能启动。为此,我使用UWP平台的启动画面功能,该功能允许我模拟加载页面。
我的问题是我必须收到服务器的“开始”一词才能解锁我的启动屏幕并传递应用程序。
所以我试图直接从我的后台调用此函数,但是不可避免地它不起作用。
退出初始屏幕的功能:
void DismissedEventHandler(SplashScreen sender, object e)
{
dismissed = true;
}
public void DismissExtendedSplash()
{
rootFrame.Navigate(typeof(MainPage));
Window.Current.Content = rootFrame;
}
void DismissSplashButton_Click(object sender, RoutedEventArgs e)
{
DismissExtendedSplash();
}
SocketActivtyTask:
case SocketActivityTriggerReason.SocketActivity:
var socket = socketInformation.StreamSocket;
DataReader reader = new DataReader(socket.InputStream);
reader.InputStreamOptions = InputStreamOptions.Partial;
await reader.LoadAsync(250);
var dataString = reader.ReadString(reader.UnconsumedBufferLength);
try
{
if (dataString.Equals("Start"))
{
Debug.WriteLine("Lancement OK.");
DismissExtendedSplash();
}
}
catch
{
Debug.WriteLine("Lancement FAIL.");
}
}
我如何使其工作?
另一个问题,在关闭应用程序时如何取消后台任务?
答案 0 :(得分:1)
从不执行任何需要花费应用程序线程时间的任务。这是在应用程序中引入性能问题(最好)或死锁(最坏)的肯定方法。使用BackgroundWorker
处理需要时间的任务。完成任务后,请使用RunWorkerCompleted
事件处理程序来更新应用程序的UI。
以下是实现BackgroundWorker
类的相对简单的示例:
https://www.codeproject.com/Articles/99143/BackgroundWorker-Class-Sample-for-Beginners
答案 1 :(得分:0)
我认为在您的情况下,您应该使用我们称为 BackgroundTask 的最佳做法。为此,您需要首先在应用程序中实现 IBackgroundTask ,这将允许您触发特定事件。
MSDN链接https://docs.microsoft.com/en-us/windows/uwp/launch-resume/create-and-register-a-background-task