Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

C# - Hide i Show


Rekomendowane odpowiedzi

Opublikowano

Witam.

Mam problem z Hide i Show

jak używam tego to wyskakuje mi error:

Nieprawidłowa operacja między wątkami: do formantu 'Form3' uzyskiwany jest dostęp z wątku innego niż wątek, w którym został utworzony.

A mam taki kod:

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Timers;
using System.Drawing.Imaging;

namespace Nortore
{
    public partial class Form3 : Form
    {
        System.Timers.Timer t = new System.Timers.Timer();
        System.Timers.Timer t2 = new System.Timers.Timer();

        string path3;

        int i = 0;

        public Form3()
        {
            InitializeComponent();
        }

        private void Form3_Load(object sender, EventArgs e)
        {
            this.Left = 1300;
            screen_Start();
        }

        public void pic_Img_Change(string imgPath)
        {
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            pictureBox1.Image = Image.FromFile(imgPath);
        }

        private void screen_Start()
        {
            t.Interval = 10000;
            t.Elapsed += new ElapsedEventHandler(screen_To_Shot);
            t.Start();

            t2.Interval = 15000;
            t2.Elapsed += new ElapsedEventHandler(frm_Hide);
            t2.Start();
        }

        public void screen_To_Shot(object source, ElapsedEventArgs e)
        {
            Rectangle bounds = Screen.GetBounds(Point.Empty);
            Bitmap bitmap = new Bitmap(bounds.Width, bounds.Height);
            Graphics.FromImage(bitmap).CopyFromScreen(Point.Empty, Point.Empty, bounds.Size);
            bitmap.Save(Path.GetDirectoryName(Application.ExecutablePath) + "\\" + Application.ProductName + "\\" + "screens" + "\\screen" + " - " + DateTime.Now.ToString("dd-MM-yyyy h-mm-ss") + ".jpg", ImageFormat.Jpeg);
            path3 = Path.GetDirectoryName(Application.ExecutablePath) + "\\" + Application.ProductName + "\\" + "screens" + "\\screen" + " - " + DateTime.Now.ToString("dd-MM-yyyy h-mm-ss") + ".jpg";
            pic_Img_Change(path3);
        }

        public void frm_Hide(object source, ElapsedEventArgs e)
        {
            shhid();
        }

        private void shhid()
        {
            if (i == 0)
            {
                i += 1;
                this.Hide();
            }
            else if (i == 1)
            {
                i -= 1;
                this.Show();
            }
        }
    }
}

 

Tam jest ten hide i show (private void shhid())

Opublikowano

callback/delegat ktory jest wywolywany co ten interval niekoniecznie musi wywolywac sie na watku od UI, co pewnie powoduje ten problem. Kod wyglada na winformsy w ktorych sie nie bawilem, wiec nie wiem jak to wyglada, ale sprobuj takiego czegos:

 this.BeginInvoke(new EventHandler(delegate
        {
            this.Hide();
        }));

jak otoczysz te hide i showy tym kodem, to kod wywola sie na pewno na tym samym watku co ui

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...