andycruce Ответов: 2

Использование операторов, не распознанных в классе


Я пытаюсь написать поток, который будет загружать данные в winform, в то время как другая обработка продолжается в фоновом режиме. Я поместил определение класса thread в отдельный файл в проекте-Thread. cs. Вот код в этом файле:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using System.Diagnostics;
using System.Windows.Forms;


namespace Thread_Test_Sending_Data_to_Thread_Function
{
    using System.Windows.Forms;

    public class Thread1
    {
        

        private delegate void SetLabelTextDelegate(FormData InputClass);
        public void FormWriteMethod(FormData InputClass)
        {
           

            if (this.InvokeRequired)
            {
                this.BeginInvoke(new SetLabelTextDelegate(FormWriteMethod), new object[] { InputClass });
                return;
            }
            TestLabel1.Text = InputClass.Label1Data.ToString();
            TestLabel2.Text = InputClass.Label2Data.ToString();
        }
    }
}


Я знаю, что определение InvokeRequired находится в системе.Окна.Формы. Ссылка работает в основном корпусе, но когда я пытаюсь сослаться на InvokeRequired или BeginInvoke в Thread. cs, она не распознается, даже если я использовал System.Окна.Формы. Ни один из операторов using в файле не распознается.

Что происходит?

Спасибо за любую помощь,

Энди Крус

Что я уже пробовал:

Я пробовал ссылаться на методы Invoke в основном корпусе, и это прекрасно работает. Я также попробовал аналогичную ссылку в других небольших файлах классов с тем же результатом - а именно, похоже, что операторы using не распознаются.

andycruce

У меня изначально не было системы использования.Окна.Оператор Forms внутри пространства имен, просто список операторов using в верхней части файла. Я положил туда только для того, чтобы посмотреть, сработает ли это. Я просто удалил единственный оператор using внутри пространства имен, чтобы вернуться к исходной конфигурации, и результат был все тот же. использование системы.Окна.Формы не используются-VS предлагает удалить все операторы using как неиспользуемые - и все методы Invoke не распознаются.

andycruce

Я просто попробовал кое-что еще. Я взял код потока и поместил его в класс, содержащийся в основной программе. Как только я положу код в класс

публичный класс что угодно
{
многопоточный код
}

методы invoke не распознаются.

2 Ответов

Рейтинг:
2

Matt T Heffron

Проблема в том, что ваш Thread1 класс не имеет InvokeRequired собственность и BeginInvoke метод. Вы называете это против Thread1 экземпляр класса (this). Чтобы эти функции вызова были доступны, this должно быть, это тот самый класс, который является форма.
Самым простым решением является реализация FormWriteMethod в ваш класс, основанный на форме.


Рейтинг:
1

OriginalGriff

Удалите отсюда строку "using":

namespace Thread_Test_Sending_Data_to_Thread_Function
{
    using System.Windows.Forms;
 
    public class Thread1
    {

У вас уже есть оператор using для этого класса, он вам больше не нужен и не может использоваться внутри пространства имен или класса.


Matt T Heffron

На самом деле, использование директива (это не использование заявление) является разрешено внутри пространства имен (но не в классе). См. спецификацию языка C#, раздел 9.4.