gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:29:44 24 4
gpt4 key购买 nike

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

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

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

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

代码曾经不久前可以工作,而且有时也可以工作。有时线程根本就没有创建。没有报错。

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

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

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

我想可能存在一些配置问题或类似问题,因为它曾经有效。我只是不明白它可能是什么。什么会影响 Thread.Start()

UPD: 我已经回滚到一个非常旧的提交,它曾经有效,但现在也失败了。所以这似乎不是配置问题,而是 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");

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

关于c# - Thread.Start() 不在 xamarin 中启动线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28088128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com