2

DDE トランザクションにNDdeを使用しています。スレッドを使用して DdeClient の複数のインスタンスを作成しようとしています。この例では、3 つのスレッドがあると仮定します。単一のスレッドで試してみると、うまくいきます。しかし、2 を超えるとエラーが返され、アドバイス ループの開始に失敗しました。問題は、マルチスレッドで各スレッドに独自の「アドバイス」ハンドラーがある場合、なぜ機能しないのでしょうか? どんな助けも大いに役立ちます

私がしたこと: 1) ループで、Thread t = new Thread(CreateDdeThread); を呼び出しました。これは private void CreateDdeThread(object data) にリンクされています 2) private void CreateDdeThread(object data) で、必要なイベント ハンドラを使用して DdeClient を作成します。

private void CreateDdeThread(object data)
{
    Console.WriteLine("CreateDdeThread");
    Spark spark = (Spark)data;
    DdeClient ddeClient = new DdeClient("Client", spark.GetClient() + ".Name");
    ddeClient.Disconnected +=new 
        EventHandler<DdeDisconnectedEventArgs>(OnDisconnected);
    ddeClient.Connect();
    ddeClient.Advise += new EventHandler<DdeAdviseEventArgs>(OnAdvise);
    ddeClient.StartAdvise(
        "Address." + spark.GetStreet(), 1, true, true, 60000, ddeClient);
}

private void OnAdvise(object sender, DdeAdviseEventArgs args)
{
    string[] p = args.Text.Split(new string[] { "\n" }, StringSplitOptions.None);
    foreach (string s in p)
    {
        Console.WriteLine(s);
    }
}
4

0 に答える 0