小编Kos*_*ukh的帖子

为什么我不能只使用EventHandler <int>而不是从EventArgs派生

文档EventHandler<TEventArgs>说:

第二个参数是从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呢?

.net c#

15
推荐指数
2
解决办法
4318
查看次数

使用lldb使用Xamarin调试本机库

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进行调试.

基本上,我可以这样做: …

xamarin.ios ios lldb xamarin xamarin-studio

13
推荐指数
1
解决办法
902
查看次数

C#.NET中的UTF-16安全子字符串

我想得到一个给定长度的子字符串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#中的等效代码是什么?

.net c# string unicode xamarin.ios

12
推荐指数
2
解决办法
1366
查看次数

C#:无法将'System.Int64'类型的对象强制转换为'System.Int32'

我的代码如下:

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但也没用.

.net c# mono xamarin.ios

7
推荐指数
2
解决办法
2万
查看次数

如何在Monotouch中继承UIApplication?

编辑:

几年后,事情变得更容易了.现在可以省略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)

但它失败了:

Objective-C exception thrown.  Name:
Run Code Online (Sandbox Code Playgroud)

NSInternalInconsistencyException原因:无法实例化UIApplication子类实例.没有加载名为UIApplicationMain的类.

所以我猜错了一些属性.但是在哪里和哪里?

c# uikit xamarin.ios uiapplication ios

6
推荐指数
1
解决办法
1682
查看次数

由于目录权限,Amazon Elastic Beanstalk上的Node.js部署失败

我尝试使用命令行工具在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)

我试过各种各样的事情:

  1. 自己创建目录(目录由root拥有).
  2. 删除/ tmp中的所有内容,以便下次修复自己.
  3. 删除我的node_modules目录.

这些选项都不起作用,我找不到解决方法或原因.我可以在本地运行node.js应用程序,并将其部署到Azure和Heroku,没有任何问题.

amazon-web-services node.js amazon-elastic-beanstalk npm-install

3
推荐指数
2
解决办法
3595
查看次数

C#:Task.Run在主线程上执行

我正在使用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# xamarin.ios task-parallel-library ios async-await

2
推荐指数
1
解决办法
3183
查看次数