WinRT의 UI 스레드에서 코드 실행
WinRT (Windows 8 Metro)의 UI 스레드에서 코드를 어떻게 실행할 수 있습니까?
Invoke방법은 존재하지 않습니다.
UI가 아닌 스레드에서 CoreWindow 를 직접 가져 오는 것이 더 쉽습니다 . 다음 코드는 경우에도, 어디에서나 작동 GetForCurrentThread()또는 Window.Current반환 널 (null) .
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
예를 들면 :
CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
// Your UI update code goes here!
});
Windows.ApplicationModel.Core네임 스페이스 를 참조해야 합니다.
using Windows.ApplicationModel.Core;
사용하다:
UI 스레드에서 다음을 실행합니다.
var dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;
백그라운드에서 (비 UI 스레드)
dispatcher.RunAsync(DispatcherPriority.Normal,
<lambda for your code which should run on the UI thread>);
CP 및 이후 빌드 모두에서 작동합니다.
사용하다:
this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => Frame.Navigate(typeof(Welcome), this));
그것은 나를 위해 작동합니다.
이것은 제 생각에 훨씬 쉬운 방법입니다.
UI와 연결된 TaskScheduler를 가져옵니다.
var UISyncContext = TaskScheduler.FromCurrentSynchronizationContext();
그런 다음 새 작업을 시작하고 위의 UISyncContext에서.
Task.Factory.StartNew(() => { /* Do your UI stuff here; */}, new System.Threading.CancellationToken(), TaskCreationOptions.PreferFairness, UISyncContext);
DispatcherTimer 도 옵션입니다.
Xaml-designer에서 실행해야하는 코드에 사용했습니다 (CoreWindow.Dispatcher, ... UWP-designer에서는 사용할 수 없음).
var localTimer = new DispatcherTimer
{
Interval = TimeSpan.FromMilliseconds(0)
};
localTimer.Tick += (timer, e) =>
{
(timer as DispatcherTimer).Stop();
action();
};
localTimer.Start();
면책 조항 :
다른 모든 것이 실패 할 경우 이것이 최후의 수단이되어야한다는 점에 유의해야합니다.
UWP에서 CaptureElement 컨트롤 (XAML에 정의 됨)의 Source 속성을 설정하는 데 문제가있었습니다. Page_Loaded를 통해 호출 된 코드에서 설정하려고 했음에도 불구하고 다른 스레드에서 준비되는 것에 대해 불평했습니다. 이벤트 핸들러. 나는 이것을 사용하여 해결했습니다.
previewControl.Dispatcher.TryRunAsync(CoreDispatcherPriority.Normal, () => {
previewControl.Source = _mediaCapture;
}).GetAwaiter().GetResult();
참고 URL : https://stackoverflow.com/questions/10579027/run-code-on-ui-thread-in-winrt
'Program Club' 카테고리의 다른 글
| Java에서 Comparable.compareTo의 반환 값은 무엇을 의미합니까? (0) | 2020.11.16 |
|---|---|
| 이터 러블을 일정한 크기의 청크로 분할하는 방법 (0) | 2020.11.16 |
| Python은 키 목록이 사전에 있는지 확인합니다. (0) | 2020.11.16 |
| jQuery promise를 사용하여 3 개의 비동기 호출을 어떻게 연결합니까? (0) | 2020.11.16 |
| 매우 긴 문자열 목록에 대한 적절한 검색 / 검색 방법은 무엇입니까? (0) | 2020.11.16 |