monix: Task.executeWithFork предотвращает выполнение?

У вас есть два основных варианта:

  1. Когда курсор мыши находится над вашим управлением, скройте системный курсор, установив this.Cursor = Cursors.None; и нарисуйте свой собственный курсор, используя любую технику, которая вам нравится. Затем обновите положение и внешний вид вашего курсора, отвечая на события мыши. Вот два примера: http://www.xamlog.com/2006/07/17/creating-a-custom-cursor/ http://www.hanselman.com/blog /DeveloperDesigner.aspx
  2. Создайте новый объект курсора, загрузив изображение из файла .cur или .ani. Вы можете создавать и редактировать эти файлы в Visual Studio. Есть также некоторые бесплатные утилиты, плавающие вокруг для борьбы с ними. В основном это изображения (или анимированные изображения), которые указывают «горячую точку», указывающую, на какой точке изображения находится курсор.

Если вы решите загрузить из файла, отметьте что вам нужен абсолютный путь к файловой системе для использования конструктора Cursor(string fileName). А именно, относительный путь или URI пакета не будут работать. Если вам нужно загрузить курсор из относительного пути или из ресурса, собранного вместе с вашей сборкой, вам нужно будет получить поток из файла и передайте его конструктору Cursor(Stream cursorStream).

С другой стороны, указание курсора как относительного пути при загрузке с помощью атрибута XAML делает работу , факт, который вы могли бы использовать для загрузки курсора на скрытый элемент управления, а затем скопируйте ссылку для использования на другом элементе управления. Я не пробовал, но он должен работать.

1
задан eprst 18 January 2019 в 08:43
поделиться

1 ответ

Поведение, которое вы видите, является результатом двух фактов:

  1. с использованием executeWithFork добавляет немного дополнительной задержки для переключения потоков

  2. [1118 ] вы используете ConcurrentSubject.publish (в отличие от replay, например). Если вы откроете документы для PublishSubject , то увидите, что

A PublishSubject отправляет подписчику только те элементы, которые испускаются Источник после времени подписки.

Другими словами, у вас есть условие состязания между основным потоком, который публикует "one" и "two", и разветвленным потоком, который должен подписаться на input, чтобы получить данные. Результаты зависят от того, какой поток выиграет гонку: все данные, опубликованные до подписки, будут потеряны. Одно мое оборудование я почти всегда вижу "two" и очень редко даже вижу "one", ваши результаты могут отличаться.

Самый простой способ проверить это - добавить Thread.sleep(100) перед первым input.onNext, и вы должны увидеть оба события, напечатанные каждый раз. Вы также можете попытаться выдвинуть больше событий, чем просто 2, чтобы увидеть, что не все потеряно.

0
ответ дан SergGr 18 January 2019 в 08:43
поделиться
Другие вопросы по тегам:

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