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

时间:2015-01-22 11:52:28

标签: c# ios multithreading xamarin.ios

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

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

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

Thread t = new Thread(ThreadProc);
t.IsBackground = true;
t.Start();

用于的代码不久前工作,有时 。有时线程根本就没有创建。没有报告错误。

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

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

我尝试使用Task界面重新创建它。任务已创建并启动正常,但不幸的是,我无法将整个解决方案迁移到Task

我猜有一些配置问题或类似的问题,因为它曾经工作过。我只是不知道它可能是什么。什么会影响Thread.Start()

UPD:我已经回到过去曾经工作的旧提交,现在它也失败了。所以它似乎不是配置问题,而是ios / xamarin问题。

1 个答案:

答案 0 :(得分:1)

我从来没有见过任何类似的东西(创建并启动一个Thread实际上没有做任何事情),所以我首先要考虑的是确保这个代码实际上是在第一时间执行的。

可以添加如下的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");

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