gpt4 book ai didi

c# - 令人困惑的 API 限制

转载 作者:行者123 更新时间:2023-11-30 17:10:36 24 4
gpt4 key购买 nike

API 不正式支持线程(见下文)或关闭事件文档的方法。也就是说,关闭事件文档的一种解决方法是调用...

SendKeys.SendWait("^{F4}");

...来自一个单独的线程。这很好用,除了我需要循环打开和关闭几个文档。如果我在线程之后放置任何代码,它将在关闭前一个文档之前运行它。我已经尝试了许多标准的线程回调方法,包括...

Task.Factory.StartNew(() =>

ThreadPool.QueueUserWorkItem(new WaitCallback

AutoResetEvent.WaitOne()

运气不好。而 Thread.Sleep() 只是阻止了错误/崩溃。有没有人有任何想法。

“Revit 的内部结构仅在几个选定的孤立位置使用多处理。这些位置目前均不包含 Revit API 中的代码或其中的任何部分。因此,Autodesk 不建议从中调用 Revit API在同时执行的并行线程中。Revit API 的某些部分可能足够隔离,能够在测试环境中从此类线程代码中成功执行;这不应被视为保证相同的源代码将适用于任何模型或情况的函数,或者 Revit 中的 future 更改不会导致此代码停止运行。”

    public void OpenFile()
{
for (int i = 0; i < 3; i++)
{
uiApp.OpenAndActivateDocument(TargetPath(i));

ThreadPool.QueueUserWorkItem(CloseDocProc);

//any code here at all opens the next doc without closing the last
}
}

public void CloseDocProc(object stateInfo)
{
SendKeys.SendWait("^{F4}");

//can run code here
}

最佳答案

正如他们所说,问题出在线程上。使用任何回调方法,它都会在那个时候卡住。而且你只能在线程中做有限的事情,它不会让我打开一个文件,无论如何!

答案是使用单线程计时器。

System.Windows.Forms.Timer;

每 10 秒左右调用我的 Open() 方法,并在计数器达到特定点时停止计时器并运行最后一位代码。

关于c# - 令人困惑的 API 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12044298/

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