<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>异常 on LeafCxy's Blog</title><link>https://leafcxy.github.io/tags/%E5%BC%82%E5%B8%B8/</link><description>Recent content in 异常 on LeafCxy's Blog</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 22 Jul 2025 01:13:36 +0000</lastBuildDate><atom:link href="https://leafcxy.github.io/tags/%E5%BC%82%E5%B8%B8/index.xml" rel="self" type="application/rss+xml"/><item><title>不能在控制元件上呼叫Invoke</title><link>https://leafcxy.github.io/posts/2025-07-22/</link><pubDate>Tue, 22 Jul 2025 01:13:36 +0000</pubDate><guid>https://leafcxy.github.io/posts/2025-07-22/</guid><description>&lt;p&gt;在Window窗體程式開發的時候，如果使用多執行緒程式設計，在子執行緒中訪問主執行緒窗體內的控制元件，就需要使用控制元件的Control.Invoke方法或者BeginInvoke方法。但是有時候因為Window執行速度太快，尤其是你寫程式碼的時候在InitializeComponent();完成之前起了一個執行緒去執行某些操作，涉及到窗體控制元件的，當你在呼叫Control.Invoke的時候，就可能出現 “在建立視窗控制代碼之前，不能在控制元件上呼叫 Invoke 或 BeginInvoke&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;解決的辦法就是讓執行緒等待，直到視窗控制代碼建立完畢：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-csharp" data-lang="csharp"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; (!&lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.IsHandleCreated)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.BeginInvoke(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; ProListIndexChangedDelegate(GetProLyric));
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;//根據不同情況也可以： &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#66d9ef"&gt;this&lt;/span&gt;.IsHandleCreated)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;BeginInvoke(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; ProListIndexChangedDelegate(GetProLyric));
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;有一個更巧妙的方法，只要在BeginInvoke方法的呼叫語句前再加一句：IntPtr i = this.Handle;就OK了，這比死迴圈配合this.IsHandleCreated的判斷方法更簡潔，因為this.Handle這個屬性本身就對應一個方法，取不到控制代碼，程式就不會向下進行。&lt;/p&gt;</description></item><item><title>git无法签出代码</title><link>https://leafcxy.github.io/posts/2025-07-21/</link><pubDate>Mon, 21 Jul 2025 06:16:50 +0000</pubDate><guid>https://leafcxy.github.io/posts/2025-07-21/</guid><description>&lt;p&gt;Q: 在Windows10上使用git clone代码的时候抛出了异常，重试了几次都是相同的错误：下载的目录里除了.git没有任何东西。&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;A: 源代码是在linux上编写的，但是在Windows10上拉取代码却出现了问题。根据提示可以看出代码clone是成功的，但是checkout的时候出现了错误。那么问题很可能是不通系统下文件属性或策略导致的。&lt;/p&gt;
&lt;p&gt;然后在Git文档上找到一个关于NTFS保护机制的配置，core.protectNTFS：&lt;/p&gt;
&lt;p&gt;If set to true, do not allow checkout of paths that would cause problems with the NTFS filesystem, e.g. conflict with 8.3 “short” names. Defaults to true on Windows, and false elsewhere.&lt;/p&gt;
&lt;p&gt;Windows系统下默认值是true，也就是说不符合NTFS策略的文件不会被签出，设置为false后可以关闭保护机制。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git config core.protectNTFS false
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item></channel></rss>