Я новичок в задачах тем.
Как получить доступ к нужной задаче и вызвать метод для этой задачи? У задачи есть идентификатор, я дал ей имя и получил TaskScheduler.
Я получаю правильное исключение:
InvalidOperationException: вызывающий поток не может получить доступ к этому объекту, поскольку объект принадлежит другому потоку.
В Main я запускаю Задача с CustomSplashScreenViewModel.StartSplashScreenAsync(). Другие задачи запускаются и выполняются. При событии, когда все загрузилось, мне нужно закрыть SplashScreen.
Метод CustomSplashScreenViewModel.CloseSplash(_splashTask, _taskSchedulerSplash); получает эту информацию. Когда я его отлаживаю, _splashTask имеет значение «null», а в _taskSchedulerSplash он содержит _splashTask внутри.
Внутри метода CloseSplash мне нравится чтобы вызвать метод _view.Close() в _splashTask.
Как это решить?
public class Program
{
private static readonly SingleThreadTaskScheduler _taskSchedulerSplash = new SingleThreadTaskScheduler(ApartmentState.STA);
[ThreadStatic]
private static Task _splashTask;
// [STAThread]
public static async Task Main()
{
_splashTask = await Task.Factory.StartNew(() =>
{
return CustomSplashScreenViewModel.StartSplashScreenAsync();
}, _taskSchedulerSplash);
var taskScheduler = new SingleThreadTaskScheduler(ApartmentState.STA);
var taskList = new List();
var updateTask = Task.Run(InstallHelper.CheckForUpdatesAsync);
updateTask.Wait();
taskList.Add(updateTask);
var tasks = await Task.Factory.ContinueWhenAll(taskList.ToArray(), result => Task.Factory.StartNew( ()=>AppStart(container), taskScheduler));
tasks.Wait();
}
private static void App_MainWindowLoaded(object sender, EventArgs e)
{
CustomSplashScreenViewModel.CloseSplash(_splashTask, _taskSchedulerSplash);
}
}
public class CustomSplashScreenViewModel
{
private static Thread _currentThread;
public static void CloseSplash(Task task, TaskScheduler taskScheduler)
{
if (_view!= null)
{
// Here i need the right Task and to invoke the following method
// if I'm doing _view.Dispatcher.Invoke(new Action(_view.Close)); it doesn't
// work coz it's another STA Thread. Inside this class I can store the right task in
// a local variable. this works. But how to invoke it if the Task is already running?
// I like to overgive the task - may it isn't possible.
_view.Close();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/592 ... nning-task
Как вызвать метод для конкретной запущенной задачи ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Получить общее время для конкретной задачи и конкретной группы пользователей по статусу
Anonymous » » в форуме MySql - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-