C # ListView 크로스 스레드, 대리자가 작동하지 않음

orfruit

ListView에 크로스 스레드 로그를 만들려고합니다.

private enum LogType {Info, Error, Warning};     
private delegate void AddItemCallback(string line, LogType lt);

private void LogAddInfo(string line, LogType lt)
{

    if (lvLog.InvokeRequired)
    {
        AddItemCallback d = new AddItemCallback(LogAddInfo);
        this.Invoke(d, new { line, lt }); // <-- here is the problem
    }
    else
    {
        // code that adds item to listView (in this case $o)
        lvLog.Items.Add(new ListViewItem(DateTime.Now.ToString(" HH:mm:ss ") + line, (int)lt));
    }

}

이렇게하면 매개 변수 수가 일치하지 않습니다. 새 개체를 올바르게 선언하는 방법은 무엇입니까? 미리 감사드립니다.

Jeroen van Langen

이 줄을 변경해야합니다.

this.Invoke(d, new { line, lt }); // <-- here is the problem

에:

this.Invoke(d, new object[] { line, lt });

// or

this.Invoke(d, line, lt);

버전은 2 개의 속성이있는 익명 클래스를 만들고 하나의 매개 변수로 전달됩니다. 이것이 매개 변수가 일치하지 않는 이유입니다.

객체의 배열 또는 두 개의 분리 된 매개 변수로 전달해야합니다.


유용한 팁. 크로스 스레딩 수정 컨트롤 (호출 포함)은 스레드 코드를 느슨하게 만들 수 있습니다. 문제는 foreach 콜백이 호출된다는 것입니다. 더 좋은 방법은 정보를 대기열에 저장하고 타이머를 사용하여 대기열을 처리하는 것입니다.

예를 들면 :

private class LogMessage
{
    public DateTime CreatedOn {get;} = DateTime.Now;
    public string Line {get;set;}
    public LogType LogType {get; set;}
}

private List<LogMessage> _logQueue = new List<LogMessage>();


private void LogAddInfo(string line, LogType lt)
{
    lock(_logQueue)
        _logQueue.Add(new LogMessage { Line = line, LogType = lt });
}


private void Timer1_tick(object sender, EventArgs e)
{
    LogMessage[] messages;

    lock(_logQueue)
    {
        messages = _logQueue.ToArray();
        _logQueue.Clear();
    }

    foreach(var msg in messages)
    {
        // add to listview
    }
}

hui 업데이트가 적기 때문에 훨씬 더 잘 실행됩니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

C ++ 스레드 안전 클래스, 예상대로 작동하지 않음

분류에서Dev

크로스 스레드 작업이 유효하지 않음 : 생성 된 스레드가 아닌 스레드에서 액세스 한 'ListView1'제어

분류에서Dev

UWP ListView 스크롤 및 확대 / 축소가 작동하지 않음

분류에서Dev

자바 스크립트가 제대로 작동하지 않음

분류에서Dev

자바 스크립트가 작동하지 않음 /로드 중

분류에서Dev

C # 대리자. 어떤 이유로 캐스팅이 작동하지 않음

분류에서Dev

하드 디스크가 자동으로 대기하지 않음

분류에서Dev

하드 디스크가 자동으로 대기하지 않음

분류에서Dev

Eclipse C ++ 11 스레드 지원이 작동하지 않음

분류에서Dev

UICollectionView 가로 스크롤이 제대로 작동하지 않음

분류에서Dev

메모리 카운터 스레드가 작동하지 않음

분류에서Dev

C # Unity 스크립트가 작동하지 않음

분류에서Dev

SelectIndexChanged가 작동하지 않음 (C # 데스크톱)

분류에서Dev

표 스크롤 용 CSS가 제대로 작동하지 않음

분류에서Dev

fadeln 스크립트가 제대로 작동하지 않음

분류에서Dev

쉘 스크립트가 제대로 작동하지 않음

분류에서Dev

suid 스크립트가 제대로 작동하지 않음

분류에서Dev

bash 스크립트가 제대로 작동하지 않음

분류에서Dev

스레드가 스레드로 작동하지 않습니다.

분류에서Dev

Flutter : ListView가 스크롤되지 않음

분류에서Dev

멀티 드롭 다운 워드 프레스가 맞지 않음, 스크롤이 작동하지 않음

분류에서Dev

내 ListView에서 스크롤이 작동하지 않음

분류에서Dev

내 ListView에서 스크롤이 작동하지 않음

분류에서Dev

자바 스크립트 자동로드 이미지 스크립트가 작동하지 않음

분류에서Dev

Android : 스레드에서 addview가 작동하지 않음 (for while)

분류에서Dev

VBScript XCopy가 로컬 디스크로 작동하지 않음

분류에서Dev

VBScript XCopy가 로컬 디스크로 작동하지 않음

분류에서Dev

Windows 10-PowerShell 레지스트리 드라이브가 제대로 작동하지 않음

분류에서Dev

콜백 리스너가 제대로 작동하지 않음

Related 관련 기사

  1. 1

    C ++ 스레드 안전 클래스, 예상대로 작동하지 않음

  2. 2

    크로스 스레드 작업이 유효하지 않음 : 생성 된 스레드가 아닌 스레드에서 액세스 한 'ListView1'제어

  3. 3

    UWP ListView 스크롤 및 확대 / 축소가 작동하지 않음

  4. 4

    자바 스크립트가 제대로 작동하지 않음

  5. 5

    자바 스크립트가 작동하지 않음 /로드 중

  6. 6

    C # 대리자. 어떤 이유로 캐스팅이 작동하지 않음

  7. 7

    하드 디스크가 자동으로 대기하지 않음

  8. 8

    하드 디스크가 자동으로 대기하지 않음

  9. 9

    Eclipse C ++ 11 스레드 지원이 작동하지 않음

  10. 10

    UICollectionView 가로 스크롤이 제대로 작동하지 않음

  11. 11

    메모리 카운터 스레드가 작동하지 않음

  12. 12

    C # Unity 스크립트가 작동하지 않음

  13. 13

    SelectIndexChanged가 작동하지 않음 (C # 데스크톱)

  14. 14

    표 스크롤 용 CSS가 제대로 작동하지 않음

  15. 15

    fadeln 스크립트가 제대로 작동하지 않음

  16. 16

    쉘 스크립트가 제대로 작동하지 않음

  17. 17

    suid 스크립트가 제대로 작동하지 않음

  18. 18

    bash 스크립트가 제대로 작동하지 않음

  19. 19

    스레드가 스레드로 작동하지 않습니다.

  20. 20

    Flutter : ListView가 스크롤되지 않음

  21. 21

    멀티 드롭 다운 워드 프레스가 맞지 않음, 스크롤이 작동하지 않음

  22. 22

    내 ListView에서 스크롤이 작동하지 않음

  23. 23

    내 ListView에서 스크롤이 작동하지 않음

  24. 24

    자바 스크립트 자동로드 이미지 스크립트가 작동하지 않음

  25. 25

    Android : 스레드에서 addview가 작동하지 않음 (for while)

  26. 26

    VBScript XCopy가 로컬 디스크로 작동하지 않음

  27. 27

    VBScript XCopy가 로컬 디스크로 작동하지 않음

  28. 28

    Windows 10-PowerShell 레지스트리 드라이브가 제대로 작동하지 않음

  29. 29

    콜백 리스너가 제대로 작동하지 않음

뜨겁다태그

보관