Используя WPF / MVVM, как я могу сразу же восстановить фокус моего приложения после закрытия внешнего процесса?

Вам просто нужно вызывать функцию вашего графика в любое время с разными значениями.

Я полагаю, что ваши avg и std векторы имеют одинаковый размер, потому что они выводятся с той же функцией extract_statistics. У вас может возникнуть проблема с вашим вектором x. Возможно, размер этого вектора не соответствует размеру векторов avg и std.

В следующем решении мы имеем три пары векторов avg и std: 50, 200, 600. Мы объединяем 3 вектора в один вектор y и e. Итак, на каждой итерации следующего цикла for мы используем один и тот же вектор x для трех разных индексов из векторов y и e. Для этого мы предполагаем, что вектор x и каждый элемент из y и e имеют одинаковый размер.

Когда мы называем что-то вроде y[:,0], например, мы нарезаем вектор y и получение всех значений первого столбца этого вектора.

times_alg_1_sparse = times_alg1['Sparse']

avg_alg1_50_sparse, std_alg1_50_sparse = extract_statistics(times_alg_1_sparse.iloc[0])
avg_alg1_200_sparse, std_alg1_200_sparse = extract_statistics(times_alg_1_sparse.iloc[1])
avg_alg1_600_sparse, std_alg1_600_sparse = extract_statistics(times_alg_1_sparse.iloc[2])

x = np.array(times_alg_1_sparse.index)
y = np.array([avg_alg1_50_sparse*1000, avg_alg1_200_sparse*1000, avg_alg1_600_sparse*1000])
e = np.array([std_alg1_50_sparse*1000, std_alg1_200_sparse*1000, std_alg1_600_sparse*1000])

colors = ['red', 'green', 'blue']    

for k in range(3):
    plt.errorbar(x, y[:,k], e[:,k], mfc=colors[k], linestyle='solid', marker='^', color=colors[k])

plt.ylim(0)
plt.show()

Вы пытаетесь использовать subplots. Что указано, если вы хотите построить на одном рисунке более одного графика.

0
задан alduin 22 January 2019 в 01:58
поделиться

2 ответа

Вы можете попытаться запустить дочерний процесс в новом потоке и вызвать process.WaitForExit() после его запуска. Затем, после закрытия дочернего процесса, вы можете сфокусировать свое приложение, используя Dispatcher, поскольку текущий поток не является потоком пользовательского интерфейса.

var process = Process.Start(@"C:\Windows\system32\mspaint.exe");
process.WaitForExit();
Dispatcher.Invoke(() => MainWindow.Current.MakeFocus()); // sample line

Ваше главное окно должно иметь статическое свойство Current, и оно должно быть установлено при запуске вашего основного приложения.

0
ответ дан opewix 22 January 2019 в 01:58
поделиться

Фокус является проблемой зрения.

Таким образом, прямой подход состоял бы в том, чтобы любая модель / служба, которую Process.Start выполняла ваша служба, вызывала событие при выходе из процесса, позволяла виртуальной машине подобрать это и вызывать событие по очереди, и, наконец, иметь вид реагирует, устанавливая фокус.

В качестве альтернативы, виртуальная машина может установить свойство, скажем CurrentlyInExternalApplication, которое при значении false вышеупомянутым событием вызовет срабатывание триггера (аналогичного существующему).

0
ответ дан BradleyDotNET 22 January 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: