C# WinForms ve Mono GTK Silverlight ve WPF

Dymo Etiket MultiThread

Yeni bir wpf uygulamasını .net 4.5.1 frameworkü ile başlatıp nuget paket yöneticisinden indirdiğim v8.5 dymo pakedini projeme ekliyorum.

Bu yazıcı ile seri çıktı basımı gönderemiyorum. Bu sebeple en azından işlem sırasına alarak çalışmaları aksatmamayı sağlamak için multithread olarak çalıştırmam gerekiyor.

Dispatcher anaThread;

public MainWindow()
{
    InitializeComponent();
    anaThread= Application.Current.Dispatcher;
}
void yazdir()
        {
            BackgroundWorker bcw = new BackgroundWorker();
            bcw.DoWork += delegate {
                try
                {
                    //mainwindow'da bulunan elementlere erişmek istediğimde çapraz işlem hatası alırım. Bu sebeple işlem yapacağım yerde değişkenlere atama yapacağım.
                    string stkod = "";
                    string miktar = "";
                    string baskiadet = "";
                    string secilenYaziciAdi = "";

                    //tanımladığım değişkenlere mainwindow'un bulunduğu thread'den verileri çekiyorum.
                    anaThread.Invoke(()=> {
                        ciktiBekleyenLBL.Visibility = Visibility.Visible;
                        stkod = stokTBX.Text;
                        miktar = pktMiktarTBX.Text;
                        baskiadet = baskiAdetTBX.Text;
                        secilenYaziciAdi = yaziciCBX.SelectedItem.ToString();

                        stokTBX.Text = "";
                        baskiAdetTBX.Text = "1";
                        pktMiktarTBX.Text = "";
                        stokTBX.Focus();
                    });

                    List<stoksor> sts = erpSorgu();
                    stoksor ss = new stoksor()
                    {
                        stok_kod = stkod,
                        stok_ad = sts.SingleOrDefault(x => x.stok_kod.Equals(stkod)).stok_ad,
                        raf_kod = sts.SingleOrDefault(x => x.stok_kod.Equals(stkod)).raf_kod
                    };
                    var label = DYMO.Label.Framework.Label.Open("urunEtiket.label");
                    label.SetObjectText("lblStokkod", ss.stok_kod);
                    label.SetObjectText("lblStokadi", ss.stok_ad);
                    label.SetObjectText("lblRafkod", ss.raf_kod);
                    label.SetObjectText("lblAdet", miktar);
                    int baski = Convert.ToInt32(baskiadet);
                    for (int i = 0; i < baski; i++) //baskı adedi kadar çıktı alacağım
                    {
                        //label.Print("DYMO LabelWriter 450");
                        label.Print(secilenYaziciAdi);
                    }
                    anaThread.Invoke(()=> {
                        ciktiBekleyenLBL.Visibility = Visibility.Hidden;
                    });
                }
                catch (Exception exc) { MessageBox.Show(yaziciCBX.SelectedItem.ToString()+ " Etiket yazıcısına ulaşılamıyor. Bilgi işleme bildirilecek hata mesajı: " + exc.Message); }

            };
            bcw.RunWorkerAsync();
        }
private void yazdirBut_Click(object sender, RoutedEventArgs e)
        {
            try{yazdir();}
            catch {MessageBox.Show("Stok listesi boş geldi. Bir bağlantı sorunu olabilir.");}
        }

 

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir