- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要更改当前代码,以便在调用 EventWaitHandle.WaitOne 时不阻塞当前线程。问题是我正在等待系统范围的事件。我还没有找到任何合适的替代品。
代码:
EventWaitHandle handle = new EventWaitHandle(false, EventResetMode.AutoReset, "Local event", out screenLoadedSignalMutexWasCreated);
StartOtherApp();
if (screenLoadedSignalMutexWasCreated)
{
isOtherAppFullyLoaded = handle.WaitOne(45000, true);
if (isOtherAppFullyLoaded )
{
// do stuff
}
else
{
// do stuff
}
handle.Dispose();
signalingCompleted = true;
}
else
{
isOtherAppFullyLoaded = false;
throw new Exception(" ");
}
我需要应用程序继续运行,而不是在我调用 WaitOne 的线路上停止,理想情况下会有等待。我该如何实现?
最佳答案
您可以在我的 AsyncEx library 中使用 AsyncFactory.FromWaitHandle
:
isOtherAppFullyLoaded = await AsyncFactory.FromWaitHandle(handle,
TimeSpan.FromMilliseconds(45000));
实现使用ThreadPool.RegisterWaitForSingleObject
:
public static Task<bool> FromWaitHandle(WaitHandle handle, TimeSpan timeout)
{
// Handle synchronous cases.
var alreadySignalled = handle.WaitOne(0);
if (alreadySignalled)
return Task.FromResult(true);
if (timeout == TimeSpan.Zero)
return Task.FromResult(false);
// Register all asynchronous cases.
var tcs = new TaskCompletionSource<bool>();
var threadPoolRegistration = ThreadPool.RegisterWaitForSingleObject(handle,
(state, timedOut) => ((TaskCompletionSource<bool>)state).TrySetResult(!timedOut),
tcs, timeout);
tcs.Task.ContinueWith(_ =>
{
threadPoolRegistration.Dispose();
}, TaskScheduler.Default);
return tcs.Task;
}
关于c# - 返工 EventWaitHandle 以异步等待信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24119429/
考虑以下伪代码: x1 = DEFAULT_VAL_1; y1 = DEFAULT_VAL_2; for (i = 0; i y0*x1) { x1 = x0;
我需要有关 MYSQL 中以下查询的一些帮助。 我有以下 SQL 表: LINK 我需要计算以下内容: 1。查询:按阶段返工次数 例如(基于orderid 749,请参阅链接)该订单在第01阶段已经有
我需要更改当前代码,以便在调用 EventWaitHandle.WaitOne 时不阻塞当前线程。问题是我正在等待系统范围的事件。我还没有找到任何合适的替代品。 代码: EventWaitHandle
我有一个 std::vector 指针 Person 对象,它有一个成员函数 std::string getName() const。我想使用 STL 算法计算 vector 中的所有 Person
我目前有一个(相当大的)JavaScript 文件,用于为页面上的某些元素设置动画。页面上使用了四“组”脚本,每组包含的脚本数量等于页面上教程中的步骤数。我想做的是重新编写脚本,以便它们将使用通配符定
下面是我的makefile # Location of the CUDA Toolkit CUDA_PATH ?= /usr/local/cuda-6.0 NVCC := $(CUDA_PATH)/
我的计算机上有一些虚拟机,它们通过主机专用网络相互通信。 我想模拟这些机器之间的中间人攻击。我发现的所有运行 MITM 的工具都只是监视数据包,但我没有找到任何可以真正重放或更改它们的工具。 我发现了
我是一名优秀的程序员,十分优秀!