我正在创建自己的自定义UITableViewCell用作原型单元的后端.在我的类中,我重写了initwithstyle:reuseIdentifier:方法来进行一些自定义初始化,但我的初始化程序没有被调用.我在其内部的第一行有一个断点,以及一个断点dequeueResusableCellWithIdentifier:.dequeueResusableCellWithIdentifier:调用该方法,它返回一个已启动的单元格,但未达到断点initwithstyle:reuseIdentifier:.任何帮助都会很棒.
我已经构建了一个WinRT组件(.winmd)供JavaScript和XAML Windows Store应用程序使用.在JavaScript客户端中包含和引用松散的.winmd文件输出时,我看到此构建警告:
Microsoft.AppXPackage.Targets(808,9):警告APPX1707:没有为.winmd文件'myRuntimeComponent.winmd'提供实现文件.要在应用清单中生成注册信息,请在项目文件中的.winmd引用项上指定"实现"元数据.
我找不到有关此错误的任何文档或如何包含实现元数据.
运行JavaScript客户端时,调用从.winmd导出的类方法时抛出此异常:
0x80040154 - JavaScript运行时错误:未注册类
请注意,我在客户端应用程序项目中引用松散的.winmd文件,而不是引用构建.winmd的Visual Studio项目.我的用例是分发.winmd输出,而不是.winmd组件的完整源代码 - 源代码分发不是一个选项.
另请注意,当Windows运行时组件作为项目引用引用时,JavaScript客户端将构建并正确运行.C#XAML客户端可以使用项目引用或对松散.winmd的引用正确运行.
当引用松散的.winmd时,似乎在客户端应用程序构建中没有生成某些注册信息.
如何构建和分发松散的Windows运行时组件以供JavaScript和托管客户端使用?
我正在包装要从.NET使用的C ++库。C ++ API中有返回的函数std::future。我想让.NET代理类返回System.Threading.Tasks.Task。
我想到了在C ++端添加一个替换方法,该方法除了方法参数外还将包含一个函数指针。然后,我可以启动一个新线程(std::async例如,使用)并等待std::future::get。一旦std::future::get返回,我可以调用传入的函数指针。在C#端,我会将指针传递给一个函数,该函数将完成返回的Task。就像是:
Task CallCpp(int a, int b) {
TaskCompletionSource<int> tcs;
Action callback = () => tcs.SetResult(0);
IntPtr callbackPtr = Marshal.GetFunctionPointerForDelegate(callback);
CppMethod(callbackPtr, a, b);
return tcs.Task;
}
[DllExport]
external void CppMethod(IntPtr callback, int a, int b);
Run Code Online (Sandbox Code Playgroud)
void CppMethod(void (*callback)(), int a, int b) {
std::future f = realmethod(a, b);
std::async([&]{ f.get; callback(); });
}
std::future realmethod(int a, int b);
Run Code Online (Sandbox Code Playgroud)
(是的,代码中有内存管理问题。尽管这样足以使您理解这个想法)
如果一个类有一个实现IDisposable的实例字段,那么包含的类实现了IDisposable和类,它在Dispose方法中对Dispose方法进行了记录.
public class A : IDisposable
{
public System.Drawing.Font font = new Font("Arial", 10.0f);
public void Dispose()
{
font.Dispose()
}
}
Run Code Online (Sandbox Code Playgroud)
(我知道我没有正确处理dispose模式,但是示例代码应该足够好)
如果该字段是静态字段,那么调用字段的Dispose应该在哪里?
public class B
{
public static System.Drawing.Font font = new Font("Arial", 10.0f);
}
Run Code Online (Sandbox Code Playgroud)
我可以让B类实现IDisposable并进行调用font.Dispose但是如果稍后再使用B.font会导致问题.除了你必须记住访问静态方法的dispise,你需要创建一个实例来调用Dispose.
我也可以创建一个静态Dispose方法,但是用户必须记住调用Dispose并且必须确保它们是程序中它的最后一个用户.
我有一个.NET应用程序,我移植到Mono所以它可以在Mac和iOS上运行.目前我的应用程序使用System.Windows.Forms进行鼠标和键盘事件.在MonoMac中我知道我可以通过最小的调整来移植代码,但是我可以使用MonoTouch吗?
c# ×2
.net ×1
c++ ×1
idisposable ×1
ios ×1
monomac ×1
pinvoke ×1
std-future ×1
uitableview ×1
winforms ×1
winjs ×1
winmd ×1
xamarin.ios ×1