Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows Phone 8.1中的多线程 我正在编写一个Windows Phone 8.1应用程序(WINRT XAML)。如何使这些方法从构造函数一次执行?我想问的是关于多线程的问题,我希望这些方法能够并行执行,而不是一个接一个地执行 这会影响应用程序的加载吗?应用程序加载速度快/慢吗_C#_Multithreading_Windows Runtime_Windows Phone 8.1_Dispatcher - Fatal编程技术网

C# Windows Phone 8.1中的多线程 我正在编写一个Windows Phone 8.1应用程序(WINRT XAML)。如何使这些方法从构造函数一次执行?我想问的是关于多线程的问题,我希望这些方法能够并行执行,而不是一个接一个地执行 这会影响应用程序的加载吗?应用程序加载速度快/慢吗

C# Windows Phone 8.1中的多线程 我正在编写一个Windows Phone 8.1应用程序(WINRT XAML)。如何使这些方法从构造函数一次执行?我想问的是关于多线程的问题,我希望这些方法能够并行执行,而不是一个接一个地执行 这会影响应用程序的加载吗?应用程序加载速度快/慢吗,c#,multithreading,windows-runtime,windows-phone-8.1,dispatcher,C#,Multithreading,Windows Runtime,Windows Phone 8.1,Dispatcher,将这些方法标记为与返回类型任务异步 例如,公共异步任务方法1(){} 您将无法从它们触发任何UI活动,但它们将在主线程之外运行。首先,如果这些方法是长时间运行的方法,您不希望在构造函数中执行它们。等待页面加载完成: public MainPage() { Method_1(); Method_2(); Method_3(); Method_4(); Method_5(); Method_6(); } 代码将把这些操作加载到另一个线程,只要方法得

将这些方法标记为与返回类型任务异步

例如,公共异步任务方法1(){}


您将无法从它们触发任何UI活动,但它们将在主线程之外运行。

首先,如果这些方法是长时间运行的方法,您不希望在构造函数中执行它们。等待页面加载完成:

public MainPage()
{
    Method_1();
    Method_2();
    Method_3();
    Method_4();
    Method_5();
    Method_6();

}
代码将把这些操作加载到另一个线程,只要方法得到正确实现,UI就会保持响应(因此不要使用wait()作为例子)

这就是示例方法的外观:

private async void Page_Loaded(object sender, RoutedEventArgs e)
{
    Task m1task = Method_1();
    Task m2task = Method_2();
    Task m3task = Method_3();
    Task all = Task.WhenAll(m1Task, m2Task, m3Task);
    await all;
}
如果您有一些繁重的计算要做,请将它们包装到
Task.Run(()=>{//code})中了解异步编程的概念非常重要。您可能需要在此处阅读:


但说真的,你写的方法与用户界面无关。您最好在其他地方运行这些功能(例如在ViewModels中,甚至在后台任务/服务中)。

是否需要在构造函数中完成所有功能?如果这些操作很耗时,那么将它们延迟到页面加载之后如何?此外,您正在做的一些事情可能与UI相关,这意味着即使您将操作分派到另一个线程,您仍然必须将其分派回UI线程进行渲染。换句话说,你的问题需要更多的细节和上下文才能得到任何有意义的答案。以上6种方法与用户界面无关。先生,好的,我将在这里执行它。Loaded+=LoadMethods();但在LoadMethods()函数中,它们仍将逐个加载。你能告诉我如何并行执行这些吗?我是说,使用多线程只是将一个方法标记为异步并不意味着它在另一个线程上运行。这当然足以让UI保持响应。@Fred你是什么意思?正如igrali所说,aync任务也可以在UI线程上运行,如果没有正确实现,它很容易用一些繁重的计算阻塞UI。@Romasz我认为如果等待该方法,它不会。编译器将生成一个状态机并在另一个线程上运行代码。UI应该保持响应性。我说的不是性能,只是响应能力。@Fred不。如果不将任务重定向到线程池,它将在UI线程上运行。考虑这样一个任务:<代码>私有异步任务DOMSOMETH(){Task.Delphi(5000).WaIT();等待任务。延迟(1000);},并在按钮单击时运行它:<代码>等待DOMMETHONSE()/代码>——它将阻塞UI线程5秒。
private async Task Method_1() {
    // Long running operation goes here
}