取消订阅股票代码更新时,带有 Binance.Net 的 Dot Net Core C# Winforms 应用程序挂起

问题描述

我在 winforms 应用程序中使用 Binance.Net API,当我取消订阅股票代码更新时遇到问题。应用程序挂起。这是我的 C# 代码

    private void btnScan_Click(object sender,EventArgs e)
    {
        BinanceClient.SetDefaultOptions(new BinanceClientOptions()
        {
            ApiCredentials = new ApiCredentials(getBinanceApiKey(),getBinanceSecretKey()),LogVerbosity = LogVerbosity.None,LogWriters = new List<TextWriter> { Console.Out }
        });

        BinanceSocketClient.SetDefaultOptions(new BinanceSocketClientOptions()
        {
            ApiCredentials = new ApiCredentials(getBinanceApiKey(),LogWriters = new List<TextWriter> { Console.Out }
        });

        if (client != null) client.dispose();
        client = new BinanceSocketClient();

        decimal minPercent = 0;
        Decimal.TryParse(txtMinPercent.Text.Trim(),out minPercent);
        if (minPercent == 0)
        {
            client.dispose();
            return;
        }

        Dictionary<String,decimal> dicPrice = new Dictionary<string,decimal>();

        client.Spot.SubscribetoAllBookTickerUpdates(data =>
        {
            var a = data;

            txtScannedSymbol.Invoke((Action)delegate { txtScannedSymbol.Text = a.Symbol; });

            if (!dicPrice.ContainsKey(a.Symbol))
            {
                dicPrice.Add(a.Symbol,a.BestAskPrice);
            }
            else
            {
                decimal prevIoUsAsk = dicPrice[a.Symbol];
                decimal newAsk = a.BestAskPrice;

                if ((newAsk != prevIoUsAsk) && (prevIoUsAsk != 0))
                {
                    decimal evol = newAsk / prevIoUsAsk;
                    if (evol>(decimal)minPercent)
                    {
                        // MessageBox.Show("High volatility on " + a.Symbol);

                        lstResults.Invoke((Action)delegate { lstResults.Items.Add(DateTime.Now.ToString() + " : " + a.Symbol + " : " + evol.ToString()); });

                    }

                    dicPrice[a.Symbol] = a.BestAskPrice;
                }
            }
        });

    }

    private void btnStopScan_Click(object sender,EventArgs e)
    {
        if (client != null) client.UnsubscribeAll();
    }

当我单击“停止扫描”按钮时会出现问题,因此在 btnStopScan_Click 事件中。

在另一个按钮中,当我使用 SubscribetoBookTickerUpdates 仅订阅一个交易品种更新时,我会使用“client.dispose();”停止订阅称呼。但是当我在使用 SubscribetoAllBookTickerUpdates 时使用相同的技术时它会挂起,即使使用 UnsubscribeAll 方法也会发生相同的行为......

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...