-1

私はこれに1週間取り組んでおり、StackOverflowを広範囲に使用していますが、これを理解することはできません.

オートデスク製品の C# でプラグインを作成しており、(Marshal を使用して) 別の 3D アプリケーションに接続しています。過去に何十もの他のプラグインでこれを問題なく実行しました。

このプロジェクトはユニークです。別の 3D アプリケーションから、大規模なモデルに対して長時間実行タスク (ファイルのエクスポート) を実行しています。場合によっては1~60分かかります。

「「アプリケーション」が応答していないため、このアクションを完了できません。「切り替え」を選択して...」という有害なメッセージが表示されます。技術的には、アプリケーションが見つかるまでクライアントに「再試行」をクリックさせることができますが、それは望ましくありません。

私は当初、DoEvents タイプのものを配置するだけで、エクスポートが完了するのを待つと思っていましたが、エクスポート サブルーチンの実行中に有害メッセージが表示されます (これは有害メッセージの最初の発生であるため、学習中です)。次に、バックグラウンド スレッドでこのエクスポート操作を実行し、ThreadPool および Thread 操作をテストすることを検討しました。ただし、サービスを「開始」することはできますが、別の 3D アプリケーションからモデルをエクスポートすることはありません。それは永遠に実行されます。 (私はそのサブ問題の解決策を探しているのではなく、以下で説明しようとしていることを探しているので、元の投稿からエラー メッセージを削除しました)

最後に、NetMsmqBinding を変更しようとしました (これについては何も知りませんが、学習しようとしています)。許可される再試行回数がより大きな数に設定されることを期待しています。

        System.TimeSpan TS = new System.TimeSpan(0, 30, 10);
        System.TimeSpan TB = new System.TimeSpan(10, 0, 0);
        NetMsmqBinding NMB = new NetMsmqBinding();
        NMB.MaxRetryCycles = 1000;
        NMB.ReceiveRetryCount = 1000;
        NMB.RetryCycleDelay = TS;
        NMB.OpenTimeout = TB;

ただし、NetMsmqBinding の値を何に変更しても、常に「再試行」メッセージが同時に表示されます。正しく書いていないといけません。他の例では、これらの値を含む xml ファイルに気付きましたが、その xml が何であるかはわかりません。また、別の xml ファイルを処理するよりも、プラグインでこれを実行したいので、知りたいとも思いません。

仮説 (console.write BS の多く) でこれに対処する方法について多くの例を見つけていますが、長時間実行されている COM プロセスがメインの C# ユーティリティを中断している具体的な例を実際に持っているものはありません。

再試行の頻度とサイクルをリセットして、有害なメッセージが表示されないようにする方法を知りたいです。どうやってやるの?

いくつかのコンテキストを提供するためのコードを次に示します。

namespace Testing_V0
{
    [PluginAttribute("Testing_V0R1", "ADSK", ToolTip = "Testing the plugin", DisplayName = "Testing the plugin")]
    [AddInPluginAttribute(AddInLocation.AddIn)]
    public class MyPlugin : AddInPlugin
    {
        public override int Execute(params string[] parameters)
        {
        System.TimeSpan TS = new System.TimeSpan(0, 30, 10);
        System.TimeSpan TB = new System.TimeSpan(10, 0, 0);
        NetMsmqBinding NMB = new NetMsmqBinding();
        NMB.MaxRetryCycles = 1000;
        NMB.ReceiveRetryCount = 1000;
        NMB.RetryCycleDelay = TS;
        NMB.OpenTimeout = TB;

        //NMB.ReceiveErrorHandling = ReceiveErrorHandling.Drop;

     //Do the Export process here
     }
    }
}
4

1 に答える 1