Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Подписка на событие из другого потока

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

koreets2011



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Добрый день!
 
Решил поизучать тему и поэкспериментировать с эквайринговыми терминалами, скачал DualConnector.dll подключил ее к Visual Studio, почитал документацию:
"Для асинхронного вызова «Exchange», необходимо подписаться на событие «OnExchange»"
 
Ошибка возникает в этом месте: [и]dclink.OnExchange += new OnExchangeHandler(dclink_OnExchange);[/и]
 
и как бы я не описывал dclink_OnExchange всегда получаю ошибку: "Нет перегруженного метода для dclink_OnExchange, который соответствует делегату OnExchangeHandler"
 
Можно конечно обойтись и синхронным методом, но тогда программа не может обработать отмену операции
 
Что сделал
 

Код:
 
 
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using SBRFPinpad;
using DualConnector;
using System.Net;
using Newtonsoft.Json.Linq;
using System.Windows.Input;
using System.Management;
 
namespace WindowsFormsApp1
{
 
    public partial class Form1 : Form
    {
        public DualConnector.DCLink dclink = new DualConnector.DCLink();
        public DualConnector.ISAPacket query = new DualConnector.SAPacket();
        public DualConnector.ISAPacket _response = new DualConnector.SAPacket();
 
        public SBRFPinpad.SBRFPinpad _SBRF = new SBRFPinpad.SBRFPinpad();
        public HttpListener server = new HttpListener();
 
        public Form1()
        {
 
            InitializeComponent();
            server.Prefixes.Add("http://127.0.0.1:8888/");
             
            backgroundWorker2.WorkerReportsProgress = true;
            backgroundWorker2.WorkerSupportsCancellation = true;
 
            richTextBox1.Text = "Сервер запущен по адресу\r\n127.0.0.1:8888";
 
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            server.Start();
            backgroundWorker2.RunWorkerAsync();
        }
 
        private void backgroundWorker2_DoWork(object sender, DoWorkEventArgs e)
        {
 
 
            if (request.HttpMethod == "POST")
            {
 
                System.IO.Stream body = request.InputStream;
                System.Text.Encoding encoding = request.ContentEncoding;
                System.IO.StreamReader reader = new System.IO.StreamReader(body, encoding);
 
                if (request.ContentType != null)
                {
 
                    string postData = reader.ReadToEnd();
                    var jsonData = JObject.Parse(postData);
 
                    string cmd = (string)jsonData.SelectToken("cmd");
                    string dataCard = "{}";
 
 
                    if (cmd == "dc_pay")
 {
 
                        query.Amount = "10";
                        query.CurrencyCode = "643";
                        query.OperationCode = 1;
                        query.TerminalID = "ХХХХХХХХХХ";
 
                        int res = dclink.InitResources();
                        if (res != 0)
                        {
                            MessageBox.Show(string.Format("Init resource:{0}-{1}", res, dclink.ErrorDescription));
                        }
 
                        dclink.OnExchange += new OnExchangeHandler(dclink_OnExchange);
 
                       
                        dclink.Dispose();
                    }
                    else if (cmd == "dc_cancel")
                    {
                        Console.WriteLine("dc_cancel");
                        int res = dclink.Cancel();
                        Console.WriteLine(res);
 
                    }
                }
            }
 
        }
 
 
       
 
        private void backgroundWorker2_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled == true)
            {
                Console.WriteLine("Canceled!");
 
            }
            else if (e.Error != null)
            {
                Console.WriteLine("Error: " + e.Error.Message);
            }
            else
            {
                Console.WriteLine("Done!");
                backgroundWorker2.RunWorkerAsync();
            }
        }
 
   
 
 
    }
 
 
 
}
 
 
 
 


Всего записей: 411 | Зарегистр. 13-10-2011 | Отправлено: 07:46 10-10-2024
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Подписка на событие из другого потока


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru