NotifyIcon + DLL для 1С8 - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток коллеги! В общем у руководства "встал" вопрос расширения фукнционала 1С8 хотят чтобы в трее появлялось окошко с уведомлением о каком либо событии Данный случая я реализовал через DLL вписал в нее вот этот код, компилирую и т.д. все ок. НО! каждый раз когда я вызываю функцию прописанную в DLL система не удаляет ярлык с появившимся уведомлением а создает новый, и так пока я не закрою саму 1С. Я думаю что вся проблема в строке:

NotifyIcon ni = new NotifyIcon();

но как то это обойти у меня не получается помогите пожалуйста!
using System;
using System.Text;
using System.Runtime.InteropServices;
using SpeechLib;
using System.Windows.Forms;
using System.Drawing;

namespace test1C8
{

    [Guid("68C6A956-A711-46DF-B426-D3B8617C6155")]
    internal interface IsMyClass
    {
        [DispId(1)]
 
        void SendSMS(string SMSText);
 
    }
 
    [Guid("70DD7E62-7D82-4301-993C-B7D919430990"), InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
    public interface IMyEvents
    {
    }

    [Guid("2660B1B1-AA71-45C8-967A-AC2E0D4708B0"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]

    public class TestClass : IsMyClass
    {

        public void SendSMS(string SMSText)
        {
            
            NotifyIcon ni = new NotifyIcon();
 
            ni.Icon = SystemIcons.Exclamation;
            ni.BalloonTipTitle = "Уведомление";
            ni.BalloonTipText = SMSText;
            ni.BalloonTipIcon = ToolTipIcon.Error;
            ni.Visible = true;
            ni.ShowBalloonTip(25000);
            
        }

    }
 
}

Решение задачи: «NotifyIcon + DLL для 1С8»

textual
Листинг программы
[Guid("2660B1B1-AA71-45C8-967A-AC2E0D4708B0"), ClassInterface(ClassInterfaceType.None), ComSourceInterfaces(typeof(IMyEvents))]
public class TestClass : IsMyClass
{
    private NotifyIcon _ni = new NotifyIcon();
    public void SendSMS(string SMSText)
    {
        _ni.Icon = SystemIcons.Exclamation;
        _ni.BalloonTipTitle = "Уведомление";
        _ni.BalloonTipText = SMSText;
        _ni.BalloonTipIcon = ToolTipIcon.Error;
        _ni.BalloonTipClosed += OnBalloonTipClosed;
        _ni.Visible = true;
        _ni.ShowBalloonTip(25000);
    }
    private void void OnBalloonTipClosed(object sender, EventArgs e)
    {
        if (_ni != null)
        {
           _ni.BalloonTipClosed -= OnBalloonTipClosed;
            _ni.Visible = false;
            _ni.Dispose();
            _ni = null;
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.25 из 5