- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有,可能是,一个简单的问题。我正在使用互操作来调用 CompactFramework 中的异步函数。获得执行结果后,我想引发一个事件,该事件将被表单捕获,并根据结果,我将在屏幕上呈现一些数据。然而,问题是,当互操作函数返回结果时,它会在工作线程上返回它,如果我引发一个事件,它将保留在工作线程上,并且我无法呈现表单中的任何数据,除非我使用调用。
有人可以建议一种将工作线程合并到主线程的方法吗?并从主线程引发一个事件?我发现了一些循环订阅事件的委托(delegate)并使用 BeginInvoke 在主线程中引发事件的示例,但是,它们都使用 ISynchronizeInvoke,这在 Compact Framework 中不可用。
我的代码如下:
public delegate void CellTowerFoundEventHandler(CellTower towerInfo);
public class CellTowerProvider
{
public delegate void RILRESULTCALLBACK(uint dwCode, IntPtr hrCmdID, IntPtr lpData, uint cbData, uint dwParam);
public delegate void RILNOTIFYCALLBACK(uint dwCode, IntPtr lpData, uint cbData, uint dwParam);
private RILCELLTOWERINFO towerDetails;
private CellTower cellTowerInfo;
private IntPtr radioInterfaceLayerHandle;
public CellTowerProvider()
{
radioInterfaceLayerHandle = IntPtr.Zero;
IntPtr radioResponseHandle = IntPtr.Zero;
// Initialize the radio layer with a result callback parameter.
radioResponseHandle = RIL_Initialize(1, new RILRESULTCALLBACK(CellDataCallback), null, 0, 0, out radioInterfaceLayerHandle);
// The initialize API call will always return 0 if initialization is successful.
if (radioResponseHandle != IntPtr.Zero)
{
return;
}
// Query for the current tower data.
radioResponseHandle = RIL_GetCellTowerInfo(radioInterfaceLayerHandle);
}
public void CellDataCallback(uint dwCode, IntPtr hrCmdID, IntPtr lpData, uint cbData, uint dwParam)
{
// Refresh the current tower details
towerDetails = new RILCELLTOWERINFO();
// Copy result returned from RIL into structure
Marshal.PtrToStructure(lpData, towerDetails);
cellTowerInfo = new CellTower()
{
TowerId = Convert.ToInt32(towerDetails.dwCellID),
LocationAreaCode = Convert.ToInt32(towerDetails.dwLocationAreaCode),
MobileCountryCode = Convert.ToInt32(towerDetails.dwMobileCountryCode),
MobileNetworkCode = Convert.ToInt32(towerDetails.dwMobileNetworkCode),
};
if (CellTowerFound != null)
CellTowerFound(cellTowerInfo);
// Release the RIL handle
RIL_Deinitialize(radioInterfaceLayerHandle);
}
}
最佳答案
为什么不在库对象的构造函数中创建一个控件?如果您假设库实例是在 UI 线程中创建的,则可以在库内部的该控件上调用 Control.Invoke,并且事件调用将在使用者的 UI 线程上进行。
当然,这并不是绝对正确的。消费者可能会在工作线程中创建实例,但它至少提供了您所追求的某种级别的内容,如果他们使用工作线程,他们实际上会期望事件无论如何都需要 Invoke 调用。
关于c# - 从工作线程 C# CF 在主线程中抛出事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1983066/
有人可以向我澄清主线 DHT 规范中的声明吗? Upon inserting the first node into its routing table and when starting up th
我正在尝试使用 USB 小工具驱动程序使嵌入式设备作为 MTP 设备工作。 我知道 Android 从大容量存储设备切换到 MTP 设备已经有一段时间了,并且找到了 source code for M
我是一名优秀的程序员,十分优秀!