我有一个Windows 10 UWP应用程序,我想尽快开始对某些类进行初始化,之后才需要完成它们。
我是多线程编程的新手,所以对我的方法明显愚蠢道歉。
我在App构造函数中启动了一个任务,将任务分配给静态属性:
sealed partial class App : Application {
...
internal static Task CoreIntialisationTask { get; set; }
public App() {
this.InitializeComponent();
CoreIntialisationTask = StartInitialisation();
this.Suspending += OnSuspending;
}
private async Task StartInitialisation() {
await InitialiseService1Async();
var service2Task = this.InitializeService2Async();
var service3Task = this.InitializeService3Async();
await service2Task;
await service3Task;
}
...
}
然后在我的第一个加载页面中,点击按钮,是这些服务需要完全初始化的最新时刻,所以我添加了检查状态并等待呼叫:
private async void btnStart_Click(object sender, RoutedEventArgs e)
{
if (App.CoreIntialisationTask.Status == TaskStatus.Running)
{
await App.CoreIntialisationTask;
...
}
...
}
但是,此时的CoreIntialisationTask状态为具有以下内部异常的失败:
(new System.Threading.Tasks.SystemThreadingTasks_FutureDebugView<System.Threading.Tasks.VoidTaskResult>(App.CoreIntialisationTask).Exception).InnerException.Message
The application called an interface that was marshalled for a different thread. (Exception from HRESULT: 0x8001010E (RPC_E_WRONG_THREAD))
at Windows.UI.Xaml.Application.get_Resources()
at MyApplication.App.<InitializeService>d__26.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
at MyApplication.App.<StartInitialisation>d__25.MoveNext()
StartInitialisation()
方法似乎转到了await service2Task
但从来没有await service3Task;
行。
我是以完全错误的方式接近这个还是我在这里缺少一些更小的东西?
答案 0 :(得分:0)
您需要检查服务器状态或过程 如果您需要服务器,可以使用:
Public Sub StratServices(ByVal servername As String)
Try
Dim service As ServiceController = New ServiceController(servername)
If service.Status = ServiceControllerStatus.Stopped Then
service.Start()
service.Refresh()
End If
Catch ex As Exception
MsgBox("You dont have Sql Srver in your Machine")
End Try
End Sub
By use System.Serviceprocess