The Twins rallied from a three-run deficit, took the lead in the seventh on a solo homer by Ryan Doumit, and then fell behind again when Alfonso Soriano hit a two-run shot for the Cubs in the eighth. It was Soriano's second home run of the game.
Willingham led off the ninth with a single and Justin Morneau followed with a triple that brought about a 7-7 tie.
Even though Minnesota had a runner on third with nobody out in the ninth, the Twins could not get him home and the game continued into extra innings.
The Cubs put their leadoff man on in the 10th and had runners on first and second with two out before Matt Capps struck out Steve Clevenger to end the threat.
Minnesota immediately made the Cubs pay when Darin Mastroianni walked, went to second on a sacrifice by Ben Revere, took third on an infield single by Jamey Carroll and scored on Willingham's base hit to left.
The teams combined for 30 hits, 16 by the Twins, and Chicago pitchers walked seven batters.
Capps (1-3) was credited with the win and the 10th-inning run was scored off Shawn Camp (2-3).
Chicago lost its third straight and has won just 19 of its 58 games. Only San Diego (19-40) has a worse record in the majors.