C# Thread.Start()不在xamarin中启动线程
我在Xamarin.IOS中有一个项目,它通过NSEvents与UI组件交互。用户界面通过带有有效负载的事件发送消息——谷歌的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
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?