微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决取消订阅股票代码更新时,带有 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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?