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;
}
}
}