第二个参数是从EventArgs派生的类型,它提供保存事件数据所需的任何字段或属性.
并且似乎通常建议在.Net文档中使用.
然而事实证明我可以做以下工作正常:
public event EventHandler<int> Panned;
Run Code Online (Sandbox Code Playgroud)
并调用事件处理程序:
int value = 10;
if (Panned != null)
{
Panned(this, value);
}
Run Code Online (Sandbox Code Playgroud)
在观察者方面:
subject.Panned += (sender, e) =>
{
Console.WriteLine(e);
};
Run Code Online (Sandbox Code Playgroud)
对我来说,这似乎不是乱抛垃圾与继承的小类的代码更好的EventArgs或一般EventArgs的建议确实.NET有一个内置的EventArgs <T>?
那么为什么我需要EventHandler从中继承泛型参数EventArgs呢?
该Xamarin调试文件表明:
使用Xamarin Studio的本机调试支持来调试C#和其他托管语言代码,并在需要调试可能与Xamarin.iOS项目链接的C,C++或Objective C代码时使用LLDB.
但是,我找不到任何有关如何使用LLDB调试Xamarin应用程序的文档.如果我在iPhone模拟器中运行我的应用程序并尝试使用LLDB附加到它,我会收到以下错误:
(lldb) attach --pid 37993
Process 37993 exited with status = -1 (0xffffffff) lost connection
error: attach failed: lost connection
Run Code Online (Sandbox Code Playgroud)
使用Xcode进行附加也不起作用.我尝试了不同的变化,attach但没有一个起作用.
有人能指出我如何使用LLDB调试Xamarin应用程序的正确方向吗?此外,这是我可以在设备上做的事情,而不仅仅是在模拟器中?我没有找到有关如何使用LLDB附加到设备上的进程的任何信息.
更新
看起来debugserver每当我lldb用来连接二进制文件时,进程都会崩溃.以下是崩溃报告的链接debugserver:https:
//www.dropbox.com/s/9lizhl2quj9n0cc/debugserver_2015-07-07-131423_gauss.crash?dl=0
更新2
当我dtruss在应用程序上运行时,它会打印系统调用,直到它遇到
dtrace: error on enabled probe ID 2475 (ID 194: syscall::ptrace:return): invalid user access in action #5 at DIF offset 0
什么时候调用ptrace(PT_DENY_ATTACH, 0, 0, 0);为什么被PT_DENY_ATTACH调用?
更新3
我跟踪了ptrace这个函数的系统调用:mono_assembly_init_with_opt这在程序的生命周期很早就发生了.所有函数都是调用ptrace,所以如果我只是从函数中提前返回,我可以使用lldb进行调试.
基本上,我可以这样做: …
我想得到一个给定长度的子字符串150.但是,我想确保我不切断unicode字符之间的字符串.
例如,请参阅以下代码:
var str = "Hello world!";
var substr = str.Substring(0, 6);
Run Code Online (Sandbox Code Playgroud)
这substr是一个无效的字符串,因为笑脸字符被切成两半.
相反,我想要一个如下功能:
var str = "Hello world!";
var substr = str.UnicodeSafeSubstring(0, 6);
Run Code Online (Sandbox Code Playgroud)
其中substr包含"你好"
作为参考,以下是我在Objective-C中使用的方法 rangeOfComposedCharacterSequencesForRange
NSString* str = @"Hello world!";
NSRange range = [message rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, 6)];
NSString* substr = [message substringWithRange:range]];
Run Code Online (Sandbox Code Playgroud)
C#中的等效代码是什么?
我的代码如下:
Dictionary<object, object> dict = ...
Color = (int)dict.GetValue("color");
Run Code Online (Sandbox Code Playgroud)
当我将Color转换为int时,我得到以下异常:
System.InvalidCastException:无法将类型为"System.Int64"的对象强制转换为"System.Int32".
我不知道为什么我不能只是从长时间转换为int.我知道这个值小于0xFFFFFF(24位),因为它是一种颜色.
我尝试过使用,unchecked但也没用.
编辑:
几年后,事情变得更容易了.现在可以省略Register()应用程序和应用程序委托上的
属性,而是使用:
UIApplication.Main(args, typeof(CustomApp), typeof(CustomAppDelegate));
为了能够覆盖UIApplication.SendEvent(),我想要子类化UIApplication:
public class UIApplicationMain : UIApplication
{
public UIApplicationMain () : base()
{
}
public override void SendEvent (UIEvent uievent)
{
base.SendEvent (uievent);
}
}
Run Code Online (Sandbox Code Playgroud)
在main.cs中我使用以下代码:
public class Application
{
static void Main (string[] args)
{
UIApplication.Main (args, "UIApplicationMain", "AppDelegateBase");
}
}
Run Code Online (Sandbox Code Playgroud)
但它失败了:
Run Code Online (Sandbox Code Playgroud)Objective-C exception thrown. Name:NSInternalInconsistencyException原因:无法实例化UIApplication子类实例.没有加载名为UIApplicationMain的类.
所以我猜错了一些属性.但是在哪里和哪里?
我尝试使用命令行工具在Elastic Beanstalk上安装一个简单的Node.js应用程序.
在我的git存储库中,我运行命令
$ eb deploy
Run Code Online (Sandbox Code Playgroud)
部署我的git存储库的内容.它部署正常,但应用程序的运行状况为红色.
如果我查看Elastic Beanstalk网站上的日志,它会指出日志中出现以下错误:
> fsevents@1.0.8 install /tmp/deployment/application/node_modules/nodemon/node_modules/chokidar/node_modules/fsevents
> node-pre-gyp install --fallback-to-build
gyp ERR! configure error
gyp ERR! stack Error: EACCES: permission denied, mkdir '/tmp/deployment/application/node_modules/nodemon/node_modules/chokidar/node_modules/fsevents/build'
gyp ERR! stack at Error (native)
gyp ERR! System Linux 4.1.17-22.30.amzn1.x86_64
gyp ERR! command "/opt/elasticbeanstalk/node-install/node-v4.3.0-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.3.0-linux-x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "configure" "--fallback-to-build" "--module=/tmp/deployment/application/node_modules/nodemon/node_modules/chokidar/node_modules/fsevents/lib/binding/Release/node-v46-linux-x64/fse.node" "--module_name=fse" "--module_path=/tmp/deployment/application/node_modules/nodemon/node_modules/chokidar/node_modules/fsevents/lib/binding/Release/node-v46-linux-x64"
gyp ERR! cwd /tmp/deployment/application/node_modules/nodemon/node_modules/chokidar/node_modules/fsevents
gyp ERR! node -v v4.3.0
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
Run Code Online (Sandbox Code Playgroud)
我试过各种各样的事情:
这些选项都不起作用,我找不到解决方法或原因.我可以在本地运行node.js应用程序,并将其部署到Azure和Heroku,没有任何问题.
amazon-web-services node.js amazon-elastic-beanstalk npm-install
我正在使用monotouch/Xamarin作为iOS应用程序.
Task.Run各州的文件:
将指定的工作排队到ThreadPool上运行并返回该工作的任务句柄.
这基本上表明它可以在任何线程上运行ThreadPool.
我想做的事情如下:
Task.Run(async () => await PerformTask());
Run Code Online (Sandbox Code Playgroud)
但让它在主线程上运行.通常我会用BeginInvokeOnMainThread如下方式编写它:
BeginInvokeOnMainThread(async () => await PerformTask());
Run Code Online (Sandbox Code Playgroud)
但我在共享代码中这样做,不想使用iOS特定的调用.有没有办法让我告诉Task.Run()在主线程上调用操作?
c# ×5
xamarin.ios ×5
.net ×3
ios ×3
async-await ×1
lldb ×1
mono ×1
node.js ×1
npm-install ×1
string ×1
uikit ×1
unicode ×1
xamarin ×1