Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Thread.Start()不在xamarin中启动线程_C#_Ios_Multithreading_Xamarin.ios - Fatal编程技术网

C# Thread.Start()不在xamarin中启动线程

C# Thread.Start()不在xamarin中启动线程,c#,ios,multithreading,xamarin.ios,C#,Ios,Multithreading,Xamarin.ios,我在Xamarin.IOS中有一个项目,它通过NSEvents与UI组件交互。用户界面通过带有有效负载的事件发送消息——谷歌的protobuf编码对象。UI是用ObjC编写的,逻辑是用C#编写的 每个NSEvent都被捕获在一个观察器中,该观察器调用内部逻辑,开始处理消息。这些消息被放入队列中,并最终由队列中的线程获取 当消息到达时,程序可以为它创建一个线程,这就是它失败的地方。代码是遗留的,因此我们使用Thread。我写 Thread t = new Thread(ThreadProc); t

我在Xamarin.IOS中有一个项目,它通过NSEvents与UI组件交互。用户界面通过带有有效负载的事件发送消息——谷歌的
protobuf
编码对象。UI是用ObjC编写的,逻辑是用C#编写的

每个
NSEvent
都被捕获在一个观察器中,该观察器调用内部逻辑,开始处理消息。这些消息被放入队列中,并最终由队列中的线程获取

当消息到达时,程序可以为它创建一个线程,这就是它失败的地方。代码是遗留的,因此我们使用
Thread
。我写

Thread t = new Thread(ThreadProc);
t.IsBackground = true;
t.Start();
这段代码不久前还可以使用,但有时也可以使用。有时线程根本就没有创建。未报告任何错误

如果我不在观察者的上下文中创建线程,那么该线程将启动

我不知道为什么会这样。当第一个线程即将创建时,问题就出现在应用程序的初始化过程中。所以我不认为有太多的线程

我试图用
任务
界面重新创建它。任务的创建和启动都正常,但很遗憾,我无法将整个解决方案迁移到
Task
s

我想可能是因为它以前工作时出现了一些配置问题或类似的问题。我只是不明白它可能是什么。什么会影响线程.Start()


UPD:我已经回滚到一个非常旧的commit,以前它是有效的,现在它也失败了。因此,这似乎不是配置问题,而是ios/xamarin问题

我从来没有见过任何类似的东西(创建和启动一个线程实际上什么都不做),所以我的第一个想法是确保这段代码实际上是在第一时间执行的

您可以添加如下Console.WriteLine语句:

Console.WriteLine ("creating thread");
Thread t = new Thread(() =>
{
    Console.WriteLine ("executing ThreadProc");
    try {
        ThreadProc ();
    } finally {
        Console.WriteLine ("finished executing ThreadProc");
    }
});
t.IsBackground = true;
t.Start();
Console.WriteLine ("started thread");

然后查看应用程序输出中实际显示的内容?

当然<代码>2015-01-22 16:07:17.064 STA[699:295687]创建线程2015-01-22 16:07:17.066 STA[699:295687]已启动线程然后我建议您在项目中提交一个bug(),以便我们可以查看。@RolfBjarneKvinge最近在一个成熟的生产应用程序中看到了两个这样的实例。每次,后台任务都不会启动(正常情况下不会写入我自己的日志)。一旦iPad重启,一切又恢复正常。以前从没见过这样的事。据我所见,它并没有耗尽内存。它是一款运行iOS 9.1的iPad Air。在Bugzilla中看不到任何日志错误。我甚至不知道如何报告这个问题。@joehanna:重启应用程序就足以解决问题,还是必须重启整个iPad?